diff options
| author | Jan Djärv | 2011-12-10 15:01:08 +0100 |
|---|---|---|
| committer | Jan Djärv | 2011-12-10 15:01:08 +0100 |
| commit | f7dfe5d679f9f5b347c481f59476ac7cebbc1579 (patch) | |
| tree | dfe58e0d968fedc3b0a69e2f9398842b92b07e92 /src | |
| parent | 2ce2526364080990ca79610de22ebd725edfc9c1 (diff) | |
| download | emacs-f7dfe5d679f9f5b347c481f59476ac7cebbc1579.tar.gz emacs-f7dfe5d679f9f5b347c481f59476ac7cebbc1579.zip | |
Don't crash on bad user input.
* nsfns.m (ns_get_defaults_value): New function.
(Fns_get_resource, x_get_string_resource): Call ns_get_defaults_value.
* nsterm.h (ns_get_defaults_value): Declare.
* nsterm.m (ns_default): Call ns_get_defaults_value.
Fixes: debbugs:10103
Diffstat (limited to 'src')
| -rw-r--r-- | src/ChangeLog | 9 | ||||
| -rw-r--r-- | src/nsfns.m | 18 | ||||
| -rw-r--r-- | src/nsterm.h | 1 | ||||
| -rw-r--r-- | src/nsterm.m | 6 |
4 files changed, 25 insertions, 9 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index 026aa6f0d04..94808c76c15 100644 --- a/src/ChangeLog +++ b/src/ChangeLog | |||
| @@ -1,3 +1,12 @@ | |||
| 1 | 2011-12-10 Jan Djärv <jan.h.d@swipnet.se> | ||
| 2 | |||
| 3 | * nsfns.m (ns_get_defaults_value): New function (Bug#10103). | ||
| 4 | (Fns_get_resource, x_get_string_resource): Call ns_get_defaults_value. | ||
| 5 | |||
| 6 | * nsterm.h (ns_get_defaults_value): Declare. | ||
| 7 | |||
| 8 | * nsterm.m (ns_default): Call ns_get_defaults_value. | ||
| 9 | |||
| 1 | 2011-12-09 Eli Zaretskii <eliz@gnu.org> | 10 | 2011-12-09 Eli Zaretskii <eliz@gnu.org> |
| 2 | 11 | ||
| 3 | * xdisp.c (try_scrolling): Don't set scroll_down_p if dy is zero. | 12 | * xdisp.c (try_scrolling): Don't set scroll_down_p if dy is zero. |
diff --git a/src/nsfns.m b/src/nsfns.m index 482650fab2b..9dade071e85 100644 --- a/src/nsfns.m +++ b/src/nsfns.m | |||
| @@ -1546,6 +1546,17 @@ Optional arg INIT, if non-nil, provides a default file name to use. */) | |||
| 1546 | return ret ? fname : Qnil; | 1546 | return ret ? fname : Qnil; |
| 1547 | } | 1547 | } |
| 1548 | 1548 | ||
| 1549 | const char * | ||
| 1550 | ns_get_defaults_value (const char *key) | ||
| 1551 | { | ||
| 1552 | NSObject *obj = [[NSUserDefaults standardUserDefaults] | ||
| 1553 | objectForKey: [NSString stringWithUTF8String: key]]; | ||
| 1554 | |||
| 1555 | if (!obj) return NULL; | ||
| 1556 | |||
| 1557 | return [[NSString stringWithFormat: @"%@", obj] UTF8String]; | ||
| 1558 | } | ||
| 1559 | |||
| 1549 | 1560 | ||
| 1550 | DEFUN ("ns-get-resource", Fns_get_resource, Sns_get_resource, 2, 2, 0, | 1561 | DEFUN ("ns-get-resource", Fns_get_resource, Sns_get_resource, 2, 2, 0, |
| 1551 | doc: /* Return the value of the property NAME of OWNER from the defaults database. | 1562 | doc: /* Return the value of the property NAME of OWNER from the defaults database. |
| @@ -1560,9 +1571,7 @@ If OWNER is nil, Emacs is assumed. */) | |||
| 1560 | CHECK_STRING (name); | 1571 | CHECK_STRING (name); |
| 1561 | /*fprintf (stderr, "ns-get-resource checking resource '%s'\n", SDATA (name)); */ | 1572 | /*fprintf (stderr, "ns-get-resource checking resource '%s'\n", SDATA (name)); */ |
| 1562 | 1573 | ||
| 1563 | value =[[[NSUserDefaults standardUserDefaults] | 1574 | value = ns_get_defaults_value (SDATA (name)); |
| 1564 | objectForKey: [NSString stringWithUTF8String: SDATA (name)]] | ||
| 1565 | UTF8String]; | ||
| 1566 | 1575 | ||
| 1567 | if (value) | 1576 | if (value) |
| 1568 | return build_string (value); | 1577 | return build_string (value); |
| @@ -2217,8 +2226,7 @@ x_get_string_resource (XrmDatabase rdb, char *name, char *class) | |||
| 2217 | /* --quick was passed, so this is a no-op. */ | 2226 | /* --quick was passed, so this is a no-op. */ |
| 2218 | return NULL; | 2227 | return NULL; |
| 2219 | 2228 | ||
| 2220 | res = [[[NSUserDefaults standardUserDefaults] objectForKey: | 2229 | res = ns_get_defaults_value (toCheck); |
| 2221 | [NSString stringWithUTF8String: toCheck]] UTF8String]; | ||
| 2222 | return !res ? NULL : | 2230 | return !res ? NULL : |
| 2223 | (!strncasecmp (res, "YES", 3) ? "true" : | 2231 | (!strncasecmp (res, "YES", 3) ? "true" : |
| 2224 | (!strncasecmp (res, "NO", 2) ? "false" : res)); | 2232 | (!strncasecmp (res, "NO", 2) ? "false" : res)); |
diff --git a/src/nsterm.h b/src/nsterm.h index 52246caac84..e6c070fcaad 100644 --- a/src/nsterm.h +++ b/src/nsterm.h | |||
| @@ -760,6 +760,7 @@ extern void ns_release_object (void *obj); | |||
| 760 | extern void ns_retain_object (void *obj); | 760 | extern void ns_retain_object (void *obj); |
| 761 | extern void *ns_alloc_autorelease_pool (); | 761 | extern void *ns_alloc_autorelease_pool (); |
| 762 | extern void ns_release_autorelease_pool (); | 762 | extern void ns_release_autorelease_pool (); |
| 763 | extern const char *ns_get_defaults_value (); | ||
| 763 | 764 | ||
| 764 | /* in nsmenu */ | 765 | /* in nsmenu */ |
| 765 | extern void update_frame_tool_bar (FRAME_PTR f); | 766 | extern void update_frame_tool_bar (FRAME_PTR f); |
diff --git a/src/nsterm.m b/src/nsterm.m index 17fd5a93f63..1d645943065 100644 --- a/src/nsterm.m +++ b/src/nsterm.m | |||
| @@ -3824,11 +3824,9 @@ ns_default (const char *parameter, Lisp_Object *result, | |||
| 3824 | Check a parameter value in user's preferences | 3824 | Check a parameter value in user's preferences |
| 3825 | -------------------------------------------------------------------------- */ | 3825 | -------------------------------------------------------------------------- */ |
| 3826 | { | 3826 | { |
| 3827 | const char *value; | 3827 | const char *value = ns_get_defaults_value (parameter); |
| 3828 | 3828 | ||
| 3829 | if ( (value =[[[NSUserDefaults standardUserDefaults] | 3829 | if (value) |
| 3830 | stringForKey: [NSString stringWithUTF8String: parameter]] | ||
| 3831 | UTF8String]) ) | ||
| 3832 | { | 3830 | { |
| 3833 | double f; | 3831 | double f; |
| 3834 | char *pos; | 3832 | char *pos; |