Reviewed by John.
authordarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 5 Mar 2005 19:20:29 +0000 (19:20 +0000)
committerdarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 5 Mar 2005 19:20:29 +0000 (19:20 +0000)
        - fixed <rdar://problem/4025918> images copied from Safari with relative src URLs aren't pasted into Mail messages (KURL resolves base URLs incorrectly)

        * kwq/KWQKURL.mm: (KURL::KURL): Add a slash at the start of the path if a relative part is adding
        a path onto a URL that has "pre-path" bits like host name, but no path yet. This doesn't come up
        for http because in that case we add a trailing "/" as part of canonicalization.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@8794 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebCore/ChangeLog-2005-08-23
WebCore/kwq/KWQKURL.mm

index fcb6ebdf00039ad394f5e05baad2b9dcb2135cac..56b16e54dc94fc61edc6c2f191b2b6104171ba9d 100644 (file)
@@ -1,3 +1,13 @@
+2005-03-05  Darin Adler  <darin@apple.com>
+
+        Reviewed by John.
+
+        - fixed <rdar://problem/4025918> images copied from Safari with relative src URLs aren't pasted into Mail messages (KURL resolves base URLs incorrectly)
+
+        * kwq/KWQKURL.mm: (KURL::KURL): Add a slash at the start of the path if a relative part is adding
+        a path onto a URL that has "pre-path" bits like host name, but no path yet. This doesn't come up
+        for http because in that case we add a trailing "/" as part of canonicalization.
+
 2005-03-04  John Sullivan  <sullivan@apple.com>
 
         Reviewed by Kevin.
index 5b03110be1fe83e80738ea8b42b3c96c6cccd185..05fd99d8f2a6cb20bf5ebcbab99b3e10002eb0c3 100644 (file)
@@ -456,7 +456,8 @@ KURL::KURL(const KURL &base, const QString &relative, const QTextCodec *codec)
                char staticBuffer[2048];
                char *buffer;
                
-               size_t bufferLength = base.pathEndPos + strlen(str) + 1;
+                // Base part plus relative part plus one possible slash added in between plus terminating \0 byte.
+               size_t bufferLength = base.pathEndPos + 1 + strlen(str) + 1;
 
                if (bufferLength > sizeof(staticBuffer)) {
                    buffer = (char *)malloc(bufferLength);
@@ -483,7 +484,14 @@ KURL::KURL(const KURL &base, const QString &relative, const QTextCodec *codec)
                    baseStringEnd--;
                }
                
-                bufferPos += copyPathRemovingDots(bufferPos, baseStringStart, 0, baseStringEnd - baseStringStart);
+               if (baseStringEnd == baseStringStart) {
+                    // no path in base, add a path separator if necessary
+                    if (base.schemeEndPos + 1 != base.pathEndPos && *str != '\0' && *str != '?' && *str != '#') {
+                        *bufferPos++ = '/';
+                    }
+                } else {
+                    bufferPos += copyPathRemovingDots(bufferPos, baseStringStart, 0, baseStringEnd - baseStringStart);
+                }
 
                const char *relStringStart = str;
                const char *relStringPos = relStringStart;