diff options
| author | Stefan Kangas | 2024-07-18 14:48:56 +0200 |
|---|---|---|
| committer | Stefan Kangas | 2024-07-18 14:48:56 +0200 |
| commit | 87facc9e3da3ca70a5a75eec57e3fa22c0636c92 (patch) | |
| tree | 414bec6e4f7a7f6a62d23092e3d8a0e9f380de57 /src | |
| parent | d00a10333f06d30fee93ba3ee033e74dc4ff85bc (diff) | |
| download | emacs-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.c | 8 |
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 | ||
| 1785 | static inline int | 1788 | static inline int |
| 1786 | pgtk_is_lower_char (int c) | 1789 | pgtk_is_lower_char (int c) |
| @@ -1803,7 +1806,7 @@ pgtk_is_numeric_char (int c) | |||
| 1803 | static GSettings * | 1806 | static GSettings * |
| 1804 | parse_resource_key (const char *res_key, char *setting_key) | 1807 | parse_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 | ||