aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorStefan Kangas2024-07-18 14:48:56 +0200
committerStefan Kangas2024-07-18 14:48:56 +0200
commit87facc9e3da3ca70a5a75eec57e3fa22c0636c92 (patch)
tree414bec6e4f7a7f6a62d23092e3d8a0e9f380de57 /src
parentd00a10333f06d30fee93ba3ee033e74dc4ff85bc (diff)
downloademacs-87facc9e3da3ca70a5a75eec57e3fa22c0636c92.tar.gz
emacs-87facc9e3da3ca70a5a75eec57e3fa22c0636c92.zip
Avoid overflow in pgtk_is_numeric_char
* src/pgtkfns.c (PATH_MAX_LEN): New macro. (parse_resource_key): Avoid overflow if a key is RESOURCE_KEY_MAX_LEN long by making the array larger.
Diffstat (limited to 'src')
-rw-r--r--src/pgtkfns.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/pgtkfns.c b/src/pgtkfns.c
index f1c0e5da0f3..f99be3bcfd1 100644
--- a/src/pgtkfns.c
+++ b/src/pgtkfns.c
@@ -1781,6 +1781,9 @@ Some window managers may refuse to restack windows. */)
1781#define SCHEMA_ID "org.gnu.emacs.defaults" 1781#define SCHEMA_ID "org.gnu.emacs.defaults"
1782#define PATH_FOR_CLASS_TYPE "/org/gnu/emacs/defaults-by-class/" 1782#define PATH_FOR_CLASS_TYPE "/org/gnu/emacs/defaults-by-class/"
1783#define PATH_PREFIX_FOR_NAME_TYPE "/org/gnu/emacs/defaults-by-name/" 1783#define PATH_PREFIX_FOR_NAME_TYPE "/org/gnu/emacs/defaults-by-name/"
1784#define PATH_MAX_LEN \
1785 (sizeof PATH_FOR_CLASS_TYPE > sizeof PATH_PREFIX_FOR_NAME_TYPE ? \
1786 sizeof PATH_FOR_CLASS_TYPE : sizeof PATH_PREFIX_FOR_NAME_TYPE)
1784 1787
1785static inline int 1788static inline int
1786pgtk_is_lower_char (int c) 1789pgtk_is_lower_char (int c)
@@ -1803,7 +1806,7 @@ pgtk_is_numeric_char (int c)
1803static GSettings * 1806static GSettings *
1804parse_resource_key (const char *res_key, char *setting_key) 1807parse_resource_key (const char *res_key, char *setting_key)
1805{ 1808{
1806 char path[32 + RESOURCE_KEY_MAX_LEN]; 1809 char path[PATH_MAX_LEN + RESOURCE_KEY_MAX_LEN];
1807 const char *sp = res_key; 1810 const char *sp = res_key;
1808 char *dp; 1811 char *dp;
1809 1812
@@ -1822,7 +1825,7 @@ parse_resource_key (const char *res_key, char *setting_key)
1822 /* generate path */ 1825 /* generate path */
1823 if (pgtk_is_upper_char (*sp)) 1826 if (pgtk_is_upper_char (*sp))
1824 { 1827 {
1825 /* First letter is upper case. It should be "Emacs", 1828 /* First letter is upper case. It should be "Emacs",
1826 * but don't care. 1829 * but don't care.
1827 */ 1830 */
1828 strcpy (path, PATH_FOR_CLASS_TYPE); 1831 strcpy (path, PATH_FOR_CLASS_TYPE);
@@ -1964,6 +1967,7 @@ pgtk_set_defaults_value (const char *key, const char *value)
1964#undef SCHEMA_ID 1967#undef SCHEMA_ID
1965#undef PATH_FOR_CLASS_TYPE 1968#undef PATH_FOR_CLASS_TYPE
1966#undef PATH_PREFIX_FOR_NAME_TYPE 1969#undef PATH_PREFIX_FOR_NAME_TYPE
1970#undef PATH_MAX_LEN
1967 1971
1968#else /* not HAVE_GSETTINGS */ 1972#else /* not HAVE_GSETTINGS */
1969 1973