Index: gdk-pixbuf/io-png.c
===================================================================
--- gdk-pixbuf/io-png.c	(revision 17178)
+++ gdk-pixbuf/io-png.c	(working copy)
@@ -204,14 +204,24 @@ png_text_to_pixbuf_option (png_text   te
                            gchar    **key,
                            gchar    **value)
 {
-        if (text_ptr.text_length > 0) {
-                *value = g_convert (text_ptr.text, -1, 
-                                    "UTF-8", "ISO-8859-1", 
-                                    NULL, NULL, NULL);
-        }
-        else {
+        gboolean is_ascii = TRUE;
+        int i;
+
+        /* Avoid loading iconv if the text is plain ASCII */
+        for (i = 0; i < text_ptr.text_length; i++)
+                if (text_ptr.text[i] & 0x80) {
+                        is_ascii = FALSE;
+                        break;
+                }
+
+        if (is_ascii) {
                 *value = g_strdup (text_ptr.text);
+        } else {
+                *value = g_convert (text_ptr.text, -1,
+                                     "UTF-8", "ISO-8859-1",
+                                     NULL, NULL, NULL);
         }
+
         if (*value) {
                 *key = g_strconcat ("tEXt::", text_ptr.key, NULL);
                 return TRUE;
@@ -602,6 +612,12 @@ png_info_callback   (png_structp png_rea
                 
                 if (w == 0 || h == 0) {
                         lc->fatal_error_occurred = TRUE;
+                        if (lc->error && *lc->error == NULL) {
+                                g_set_error (lc->error,
+                                             GDK_PIXBUF_ERROR,
+                                             GDK_PIXBUF_ERROR_FAILED,
+                                             _("Transformed PNG has zero width or height."));
+                        }
                         return;
                 }
         }
