diff options
| author | Jan Djärv | 2011-01-29 12:30:11 +0100 |
|---|---|---|
| committer | Jan Djärv | 2011-01-29 12:30:11 +0100 |
| commit | 497a1925ecc0550630ba44f29d2db7378e7c9e4e (patch) | |
| tree | 2fb84329b5cba8f282d156c41d9996cc94aab92e | |
| parent | 8907f7b9368b0eb9d2764248edacd08cda7dc3af (diff) | |
| download | emacs-497a1925ecc0550630ba44f29d2db7378e7c9e4e.tar.gz emacs-497a1925ecc0550630ba44f29d2db7378e7c9e4e.zip | |
Handle nul-character in copy/paste (Bug#7934).
* nsselect.m (ns_string_from_pasteboard): Get length of string
and use make_string instead of build_string.
(ns_string_to_pasteboard_internal): Use initWithBytesNoCopy
instead of stringWithUTF8String (Bug#7934).
| -rw-r--r-- | src/ChangeLog | 7 | ||||
| -rw-r--r-- | src/nsselect.m | 20 |
2 files changed, 22 insertions, 5 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index f8686529221..340ca37aae4 100644 --- a/src/ChangeLog +++ b/src/ChangeLog | |||
| @@ -1,3 +1,10 @@ | |||
| 1 | 2011-01-29 Jan Djärv <jan.h.d@swipnet.se> | ||
| 2 | |||
| 3 | * nsselect.m (ns_string_from_pasteboard): Get length of string | ||
| 4 | and use make_string instead of build_string (Bug#7934). | ||
| 5 | (ns_string_to_pasteboard_internal): Use initWithBytesNoCopy | ||
| 6 | instead of stringWithUTF8String (Bug#7934). | ||
| 7 | |||
| 1 | 2011-01-29 Anders Lindgren <andlind@gmail.com> (tiny change) | 8 | 2011-01-29 Anders Lindgren <andlind@gmail.com> (tiny change) |
| 2 | 9 | ||
| 3 | * nsfont.m (nsfont_open): Ensure that fonts with inexact | 10 | * nsfont.m (nsfont_open): Ensure that fonts with inexact |
diff --git a/src/nsselect.m b/src/nsselect.m index d9e9e7d524c..299a24e4a8c 100644 --- a/src/nsselect.m +++ b/src/nsselect.m | |||
| @@ -153,8 +153,10 @@ ns_string_to_pasteboard_internal (id pb, Lisp_Object str, NSString *gtype) | |||
| 153 | CHECK_STRING (str); | 153 | CHECK_STRING (str); |
| 154 | 154 | ||
| 155 | utfStr = SDATA (str); | 155 | utfStr = SDATA (str); |
| 156 | nsStr = [NSString stringWithUTF8String: utfStr]; | 156 | nsStr = [[NSString alloc] initWithBytesNoCopy: utfStr |
| 157 | 157 | length: SBYTES (str) | |
| 158 | encoding: NSUTF8StringEncoding | ||
| 159 | freeWhenDone: NO]; | ||
| 158 | if (gtype == nil) | 160 | if (gtype == nil) |
| 159 | { | 161 | { |
| 160 | [pb declareTypes: ns_send_types owner: nil]; | 162 | [pb declareTypes: ns_send_types owner: nil]; |
| @@ -166,6 +168,7 @@ ns_string_to_pasteboard_internal (id pb, Lisp_Object str, NSString *gtype) | |||
| 166 | { | 168 | { |
| 167 | [pb setString: nsStr forType: gtype]; | 169 | [pb setString: nsStr forType: gtype]; |
| 168 | } | 170 | } |
| 171 | [nsStr release]; | ||
| 169 | } | 172 | } |
| 170 | } | 173 | } |
| 171 | 174 | ||
| @@ -303,6 +306,7 @@ ns_string_from_pasteboard (id pb) | |||
| 303 | { | 306 | { |
| 304 | NSString *type, *str; | 307 | NSString *type, *str; |
| 305 | const char *utfStr; | 308 | const char *utfStr; |
| 309 | int length; | ||
| 306 | 310 | ||
| 307 | type = [pb availableTypeFromArray: ns_return_types]; | 311 | type = [pb availableTypeFromArray: ns_return_types]; |
| 308 | if (type == nil) | 312 | if (type == nil) |
| @@ -344,17 +348,23 @@ ns_string_from_pasteboard (id pb) | |||
| 344 | options: NSLiteralSearch range: NSMakeRange (0, [mstr length])]; | 348 | options: NSLiteralSearch range: NSMakeRange (0, [mstr length])]; |
| 345 | 349 | ||
| 346 | utfStr = [mstr UTF8String]; | 350 | utfStr = [mstr UTF8String]; |
| 347 | if (!utfStr) | 351 | length = [mstr lengthOfBytesUsingEncoding: NSUTF8StringEncoding]; |
| 348 | utfStr = [mstr cString]; | 352 | |
| 353 | if (!utfStr) | ||
| 354 | { | ||
| 355 | utfStr = [mstr cString]; | ||
| 356 | length = strlen (utfStr); | ||
| 357 | } | ||
| 349 | } | 358 | } |
| 350 | NS_HANDLER | 359 | NS_HANDLER |
| 351 | { | 360 | { |
| 352 | message1 ("ns_string_from_pasteboard: UTF8String failed\n"); | 361 | message1 ("ns_string_from_pasteboard: UTF8String failed\n"); |
| 353 | utfStr = [str lossyCString]; | 362 | utfStr = [str lossyCString]; |
| 363 | length = strlen (utfStr); | ||
| 354 | } | 364 | } |
| 355 | NS_ENDHANDLER | 365 | NS_ENDHANDLER |
| 356 | 366 | ||
| 357 | return build_string (utfStr); | 367 | return make_string (utfStr, length); |
| 358 | } | 368 | } |
| 359 | 369 | ||
| 360 | 370 | ||