chiark / gitweb /
Fix a bug introduced by r9495 in which we try to write temporary NULs
authorSimon Tatham <anakin@pobox.com>
Wed, 6 Jun 2012 17:59:37 +0000 (17:59 +0000)
committerSimon Tatham <anakin@pobox.com>
Wed, 6 Jun 2012 17:59:37 +0000 (17:59 +0000)
into a string which is usually a read-only string literal. Instead,
copy each segment into writable memory as we need it, and free it
afterwards.

[originally from svn r9558]
[r9495 == d0ff371b144d4bfe3cbfb062388347c08e431393]

osx.m

diff --git a/osx.m b/osx.m
index b59999d7f100f1c4bcbad3fd19899ab24bc539f6..6e709a545370e0f4e7f7f4f1a381c7227354f469 100644 (file)
--- a/osx.m
+++ b/osx.m
@@ -1088,15 +1088,16 @@ struct frontend {
                p = i->sval;
                c = *p++;
                while (*p) {
-                   char cc, *q;
+                   char *q, *copy;
 
                    q = p;
                    while (*p && *p != c) p++;
 
-                   cc = *p;
-                   *p = '\0';
-                   [pb addItemWithTitle:[NSString stringWithUTF8String:q]];
-                   *p = cc;
+                    copy = snewn((p-q) + 1, char);
+                    memcpy(copy, q, p-q);
+                    copy[p-q] = '\0';
+                   [pb addItemWithTitle:[NSString stringWithUTF8String:copy]];
+                    sfree(copy);
 
                    if (*p) p++;
                }