Try to protect against wild langinfo() arguments.
Jarkko Hietaniemi [Sat, 1 Dec 2001 18:43:11 +0000 (18:43 +0000)]
p4raw-id: //depot/perl@13410

ext/I18N/Langinfo/Langinfo.xs

index d335eec..314e891 100644 (file)
@@ -19,8 +19,32 @@ langinfo(code)
        int     code
   CODE:
 #ifdef HAS_NL_LANGINFO
-       char *s = nl_langinfo(code);
-       RETVAL = newSVpvn(s, strlen(s));
+       char *s;
+       if (code) { /* bold assumption: all valid langinfo codes > 0 */
+#ifdef _MAXSTRMSG
+           if (code >= _MAXSTRMSG
+               RETVAL = &PL_sv_undef;
+           else
+#else
+#   ifdef _NL_NUM_ITEMS
+           if (code >= _NL_NUM_ITEMS)
+               RETVAL = &PL_sv_undef;
+           else
+#   else
+#       ifdef _NL_NUM
+           if (code >= _NL_NUM)
+               RETVAL = &PL_sv_undef;
+           else
+#       endif
+#   endif
+#endif
+           {
+               s = nl_langinfo(code);
+               RETVAL = newSVpvn(s, strlen(s));
+           }
+       } else {
+           RETVAL = &PL_sv_undef;
+       }
 #else
        croak("nl_langinfo() not implemented on this architecture");
 #endif