[前][次][番号順一覧][スレッド一覧]

ruby-changes:11364

From: nobu <ko1@a...>
Date: Tue, 17 Mar 2009 10:29:33 +0900 (JST)
Subject: [ruby-changes:11364] Ruby:r22984 (trunk): * dir.c, dln.c, parse.y, re.c, ruby.c, sprintf.c, strftime.c,

nobu	2009-03-17 10:29:17 +0900 (Tue, 17 Mar 2009)

  New Revision: 22984

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=22984

  Log:
    * dir.c, dln.c, parse.y, re.c, ruby.c, sprintf.c, strftime.c,
      string.c, util.c, variable.c: use strlcpy, memcpy and snprintf
      instead of strcpy, strncpy and sprintf.

  Modified files:
    trunk/ChangeLog
    trunk/dir.c
    trunk/dln.c
    trunk/parse.y
    trunk/re.c
    trunk/ruby.c
    trunk/sprintf.c
    trunk/strftime.c
    trunk/string.c
    trunk/util.c
    trunk/variable.c

Index: re.c
===================================================================
--- re.c	(revision 22983)
+++ re.c	(revision 22984)
@@ -366,7 +366,7 @@
 	    else if (!rb_enc_isspace(c, enc)) {
 		char b[8];
 
-		sprintf(b, "\\x%02X", c);
+		snprintf(b, sizeof(b), "\\x%02X", c);
 		rb_str_buf_cat(str, b, 4);
 	    }
 	    else {
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 22983)
+++ ChangeLog	(revision 22984)
@@ -1,3 +1,9 @@
+Tue Mar 17 10:29:22 2009  Nobuyoshi Nakada  <nobu@r...>
+
+	* dir.c, dln.c, parse.y, re.c, ruby.c, sprintf.c, strftime.c,
+	  string.c, util.c, variable.c: use strlcpy, memcpy and snprintf
+	  instead of strcpy, strncpy and sprintf.
+
 Mon Mar 16 17:15:16 2009  Nobuyoshi Nakada  <nobu@r...>
 
 	* test/dl/test_win32.rb (Win32API): enclosed by DL::TestWin32.
Index: variable.c
===================================================================
--- variable.c	(revision 22983)
+++ variable.c	(revision 22984)
@@ -455,10 +455,11 @@
 
     if (name[0] == '$') id = rb_intern(name);
     else {
-	char *buf = ALLOCA_N(char, strlen(name)+2);
+	size_t len = strlen(name);
+	char *buf = ALLOCA_N(char, len+1);
 	buf[0] = '$';
-	strcpy(buf+1, name);
-	id = rb_intern(buf);
+	memcpy(buf+1, name, len);
+	id = rb_intern2(buf, len+1);
     }
     return id;
 }
@@ -733,13 +734,14 @@
 rb_f_global_variables(void)
 {
     VALUE ary = rb_ary_new();
-    char buf[4];
-    const char *s = "123456789";
+    char buf[2];
+    int i;
 
     st_foreach_safe(rb_global_tbl, gvar_i, ary);
-    while (*s) {
-	sprintf(buf, "$%c", *s++);
-	rb_ary_push(ary, ID2SYM(rb_intern(buf)));
+    buf[0] = '$';
+    for (i = 1; i <= 9; ++i) {
+	buf[1] = (char)(i + '0');
+	rb_ary_push(ary, ID2SYM(rb_intern2(buf, 2)));
     }
     return ary;
 }
Index: string.c
===================================================================
--- string.c	(revision 22983)
+++ string.c	(revision 22984)
@@ -4347,19 +4347,19 @@
 		if (MBCLEN_CHARFOUND_P(n)) {
 		    int cc = rb_enc_codepoint(p-1, pend, enc);
 		    p += n;
-		    sprintf(q, "u{%x}", cc);
+		    snprintf(q, qend-q, "u{%x}", cc);
 		    q += strlen(q);
 		    continue;
 		}
 	    }
-	    sprintf(q, "x%02X", c);
+	    snprintf(q, qend-q, "x%02X", c);
 	    q += 3;
 	}
     }
     *q++ = '"';
     *q = '\0';
     if (!rb_enc_asciicompat(enc)) {
-	sprintf(q, ".force_encoding(\"%s\")", enc->name);
+	snprintf(q, qend-q, ".force_encoding(\"%s\")", enc->name);
 	enc = rb_ascii8bit_encoding();
     }
     OBJ_INFECT(result, str);
Index: dir.c
===================================================================
--- dir.c	(revision 22983)
+++ dir.c	(revision 22984)
@@ -1463,7 +1463,8 @@
     }
 
     if (lbrace && rbrace) {
-	char *buf = GLOB_ALLOC_N(char, strlen(s) + 1);
+	size_t len = strlen(s) + 1;
+	char *buf = GLOB_ALLOC_N(char, len);
 	long shift;
 
 	if (!buf) return -1;
@@ -1482,7 +1483,7 @@
 		Inc(p, pend, enc);
 	    }
 	    memcpy(buf+shift, t, p-t);
-	    strcpy(buf+shift+(p-t), rbrace+1);
+	    strlcpy(buf+shift+(p-t), rbrace+1, len-(shift+(p-t)));
 	    status = ruby_brace_expand(buf, flags, func, arg, enc);
 	    if (status) break;
 	}
Index: sprintf.c
===================================================================
--- sprintf.c	(revision 22983)
+++ sprintf.c	(revision 22984)
@@ -988,7 +988,7 @@
 			    buf[blen++] = '+';
 			else if (flags & FSPACE)
 			    blen++;
-			strncpy(&buf[blen], expr, strlen(expr));
+			memcpy(&buf[blen], expr, strlen(expr));
 		    }
 		    else {
 			if (!isnan(fval) && fval < 0.0)
@@ -997,8 +997,8 @@
 			    buf[blen + need - strlen(expr) - 1] = '+';
 			else if ((flags & FSPACE) && need > width)
 			    blen++;
-			strncpy(&buf[blen + need - strlen(expr)], expr,
-				strlen(expr));
+			memcpy(&buf[blen + need - strlen(expr)], expr,
+			       strlen(expr));
 		    }
 		    blen += strlen(&buf[blen]);
 		    break;
Index: strftime.c
===================================================================
--- strftime.c	(revision 22983)
+++ strftime.c	(revision 22984)
@@ -243,7 +243,7 @@
 			savetz = (char *) malloc(tzlen + 1);
 			if (savetz != NULL) {
 				savetzlen = tzlen + 1;
-				strcpy(savetz, tz);
+				memcpy(savetz, tz, savetzlen);
 			}
 		}
 		tzset();
@@ -256,10 +256,10 @@
 			savetz = (char *) realloc(savetz, i);
 			if (savetz) {
 				savetzlen = i;
-				strcpy(savetz, tz);
+				memcpy(savetz, tz, i);
 			}
 		} else
-			strcpy(savetz, tz);
+			memcpy(savetz, tz, i);
 		tzset();
 	}
 #endif	/* POSIX_SEMANTICS */
Index: parse.y
===================================================================
--- parse.y	(revision 22983)
+++ parse.y	(revision 22984)
@@ -881,10 +881,10 @@
 		| keyword_alias tGVAR tBACK_REF
 		    {
 		    /*%%%*/
-			char buf[3];
-
-			sprintf(buf, "$%c", (char)$3->nd_nth);
-			$$ = NEW_VALIAS($2, rb_intern(buf));
+			char buf[2];
+			buf[0] = '$';
+			buf[1] = (char)$3->nd_nth;
+			$$ = NEW_VALIAS($2, rb_intern2(buf, 2));
 		    /*%
 			$$ = dispatch2(var_alias, $2, $3);
 		    %*/
@@ -7041,7 +7041,7 @@
 	    if (nondigit) {
 		char tmp[30];
 	      trailing_uc:
-		sprintf(tmp, "trailing `%c' in number", nondigit);
+		snprintf(tmp, sizeof(tmp), "trailing `%c' in number", nondigit);
 		yyerror(tmp);
 	    }
 	    if (is_float) {
@@ -10011,9 +10011,9 @@
     char buf[8];
 
     if (id <= 256) {
-        buf[0] = id;
+        buf[0] = (char)id;
         buf[1] = '\0';
-        return ID2SYM(rb_intern(buf));
+        return ID2SYM(rb_intern2(buf, 1));
     }
     if ((name = keyword_id_to_str(id))) {
         return ID2SYM(rb_intern(name));
Index: dln.c
===================================================================
--- dln.c	(revision 22983)
+++ dln.c	(revision 22984)
@@ -127,7 +127,7 @@
 	free(*buf);\
 	rb_memerror();\
     }\
-    strcpy(tmp, *buf);\
+    strlcpy(tmp, *buf, len + 1);\
     free(*buf);\
     *buf = tmp;\
 } while (0)
@@ -1224,7 +1224,7 @@
     /* Load the file as an object one */
     init_funcname(&buf, file);
 
-    strcpy(winfile, file);
+    strlcpy(winfile, file, sizeof(winfile));
 
     /* Load file */
     if ((handle = LoadLibrary(winfile)) == NULL) {
@@ -1669,7 +1669,7 @@
 		    fprintf(stderr, "\tFile \"%s%s\"\n", fname, extension[j]);
 		    continue;
 		}
-		strcpy(bp + i, extension[j]);
+		strlcpy(bp + i, extension[j], fspace);
 		if (stat(fbuf, &st) == 0)
 		    return fbuf;
 	    }
Index: util.c
===================================================================
--- util.c	(revision 22983)
+++ util.c	(revision 22984)
@@ -270,6 +270,7 @@
     char *s, *t, *p;
     long slen;
     char buf[1024];
+    char *const bufend = buf + sizeof(buf);
 
     if (RSTRING_LEN(str) > 1000)
         rb_fatal("Cannot do inplace edit on long filename (%ld characters)",
@@ -300,7 +301,7 @@
 
     if (*suffix == '.') {        /* Style 1 */
         if (strEQ(ext, suffix)) goto fallback;
-	strcpy(p, suffix);
+	strlcpy(p, suffix, bufend - p);
     }
     else if (suffix[1] == '\0') {  /* Style 2 */
         if (extlen < 4) {
@@ -317,7 +318,7 @@
 	    buf[7] = *suffix;
 	}
 	else goto fallback;
-	strcpy(p, ext);
+	strlcpy(p, ext, bufend - p);
     }
     else { /* Style 3:  Panic */
 fallback:
Index: ruby.c
===================================================================
--- ruby.c	(revision 22983)
+++ ruby.c	(revision 22984)
@@ -379,7 +379,7 @@
 	}
     }
     else {
-	strcpy(libpath, ".");
+	strlcpy(libpath, ".", sizeof(libpath));
 	p = libpath + 1;
     }
 
@@ -522,15 +522,16 @@
     char **argv, *p;
     const char *ap = 0;
     VALUE argstr, argary;
+    int len;
 
     while (ISSPACE(*s)) s++;
     if (!*s) return;
-    argstr = rb_str_tmp_new(strlen(s) + 2);
+    argstr = rb_str_tmp_new((len = strlen(s)) + 2);
     argary = rb_str_tmp_new(0);
 
     p = RSTRING_PTR(argstr);
     *p++ = ' ';
-    strcpy(p, s);
+    memcpy(p, s, len + 1);
     ap = 0;
     rb_str_cat(argary, (char *)&ap, sizeof(ap));
     while (*p) {

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]