aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJan Djärv2011-12-10 15:01:08 +0100
committerJan Djärv2011-12-10 15:01:08 +0100
commitf7dfe5d679f9f5b347c481f59476ac7cebbc1579 (patch)
treedfe58e0d968fedc3b0a69e2f9398842b92b07e92 /src
parent2ce2526364080990ca79610de22ebd725edfc9c1 (diff)
downloademacs-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/ChangeLog9
-rw-r--r--src/nsfns.m18
-rw-r--r--src/nsterm.h1
-rw-r--r--src/nsterm.m6
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 @@
12011-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
12011-12-09 Eli Zaretskii <eliz@gnu.org> 102011-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
1549const char *
1550ns_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
1550DEFUN ("ns-get-resource", Fns_get_resource, Sns_get_resource, 2, 2, 0, 1561DEFUN ("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);
760extern void ns_retain_object (void *obj); 760extern void ns_retain_object (void *obj);
761extern void *ns_alloc_autorelease_pool (); 761extern void *ns_alloc_autorelease_pool ();
762extern void ns_release_autorelease_pool (); 762extern void ns_release_autorelease_pool ();
763extern const char *ns_get_defaults_value ();
763 764
764/* in nsmenu */ 765/* in nsmenu */
765extern void update_frame_tool_bar (FRAME_PTR f); 766extern 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;