shithub: puzzles

Download patch

ref: 48e9767a206420294147f802a8a2cc5c9e77141c
parent: 5a095b8a08fa9f087b93c86aea0fa027138b028d
author: Simon Tatham <anakin@pobox.com>
date: Wed Jun 6 13:59:37 EDT 2012

Fix a bug introduced by r9495 in which we try to write temporary NULs
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]

--- a/osx.m
+++ b/osx.m
@@ -1088,15 +1088,16 @@
 		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++;
 		}