diff --git a/contrib/libtests/pnggetset.c b/contrib/libtests/pnggetset.c index e2c1ca556f..f9693172cf 100644 --- a/contrib/libtests/pnggetset.c +++ b/contrib/libtests/pnggetset.c @@ -332,6 +332,10 @@ test_text_roundtrip(void) text_entries[i].key = (png_charp)keys[i]; text_entries[i].text = (png_charp)vals[i]; } +#ifdef PNG_iTXt_SUPPORTED + /* Exercise the documented NULL language pointers for iTXt. */ + text_entries[TEXT_COUNT - 1].compression = PNG_ITXT_COMPRESSION_NONE; +#endif png_set_text(png_ptr, info_ptr, text_entries, TEXT_COUNT); /* Get the internal pointer and feed it straight back (append). */ diff --git a/pngset.c b/pngset.c index 10eea62e54..874fa9baa7 100644 --- a/pngset.c +++ b/pngset.c @@ -1105,10 +1105,12 @@ png_set_text_2(const png_struct *png_ptr, png_info *info_ptr, if (text_ptr[i].compression > 0) { textp->lang = textp->key + key_len + 1; - memcpy(textp->lang, text_ptr[i].lang, lang_len); + if (lang_len != 0) + memcpy(textp->lang, text_ptr[i].lang, lang_len); *(textp->lang + lang_len) = '\0'; textp->lang_key = textp->lang + lang_len + 1; - memcpy(textp->lang_key, text_ptr[i].lang_key, lang_key_len); + if (lang_key_len != 0) + memcpy(textp->lang_key, text_ptr[i].lang_key, lang_key_len); *(textp->lang_key + lang_key_len) = '\0'; textp->text = textp->lang_key + lang_key_len + 1; }