summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruno Haible <bruno@clisp.org>2011-10-15 17:30:44 +0200
committerBruno Haible <bruno@clisp.org>2011-10-15 17:30:44 +0200
commit1a1831be04f634375c7e7c56cac7ec2f4167e863 (patch)
tree097ee8e0c0b6346dc2a6f27d1ba0188d9b8d575c
parent61e3e44b2a49643c05f0f5c0221d5a2ae3d363fd (diff)
downloadgettext-1a1831be04f634375c7e7c56cac7ec2f4167e863.tar.gz
Avoid crash in *printf functions for invalid format string with dollar.
-rw-r--r--gettext-runtime/intl/ChangeLog8
-rw-r--r--gettext-runtime/intl/printf.c4
2 files changed, 12 insertions, 0 deletions
diff --git a/gettext-runtime/intl/ChangeLog b/gettext-runtime/intl/ChangeLog
index cb55f3a44..425001559 100644
--- a/gettext-runtime/intl/ChangeLog
+++ b/gettext-runtime/intl/ChangeLog
@@ -1,5 +1,13 @@
2011-10-15 Bruno Haible <bruno@clisp.org>
+ Avoid crash in *printf functions for invalid format string with dollar.
+ * printf.c (libintl_vsnprintf, libintl_vswprintf): Don't crash in
+ mempy if libintl_vasnprintf returned NULL.
+ Reported by Jeong, Heon <bimarket@gmail.com>
+ in <https://savannah.gnu.org/bugs/?34555>.
+
+2011-10-15 Bruno Haible <bruno@clisp.org>
+
vasnprintf: Optimize bit search operation.
* vasnprintf.c (divide): Use optimizations from gnulib's
integer_length.c.
diff --git a/gettext-runtime/intl/printf.c b/gettext-runtime/intl/printf.c
index 157853ad4..0369e879e 100644
--- a/gettext-runtime/intl/printf.c
+++ b/gettext-runtime/intl/printf.c
@@ -213,6 +213,8 @@ libintl_vsnprintf (char *resultbuf, size_t length, const char *format, va_list a
{
size_t maxlength = length;
char *result = libintl_vasnprintf (resultbuf, &length, format, args);
+ if (result == NULL)
+ return -1;
if (result != resultbuf)
{
if (maxlength > 0)
@@ -388,6 +390,8 @@ libintl_vswprintf (wchar_t *resultbuf, size_t length, const wchar_t *format, va_
{
size_t maxlength = length;
wchar_t *result = libintl_vasnwprintf (resultbuf, &length, format, args);
+ if (result == NULL)
+ return -1;
if (result != resultbuf)
{
if (maxlength > 0)