summaryrefslogtreecommitdiff
path: root/string.c
diff options
context:
space:
mode:
authorYukihiro Matsumoto <matz@ruby-lang.org>1997-11-18 13:59:59 +0900
committerTakashi Kokubun <takashikkbn@gmail.com>2019-08-17 22:09:33 +0900
commitcfd31fa21b67c4992a0360d7c605de1c6add874e (patch)
treed34f234a51909b313ba3f1e7e4829caa65f1fca6 /string.c
parent9b01ce69546380c57cb602e045be4fc012cd81b7 (diff)
version 1.0-971118v1_0_971118
https://cache.ruby-lang.org/pub/ruby/1.0/ruby-1.0-971118.tar.gz Tue Nov 18 13:59:59 1997 Yukihiro Matsumoto <matz@netlab.co.jp> * version 1.0-971118 Tue Nov 18 10:13:08 1997 Yukihiro Matsumoto <matz@netlab.co.jp> * regex.c (re_compile_pattern): insert initialize code for jump_n, before entering loops. Sat Nov 15 00:11:36 1997 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp> * io.c (io_s_popen): "rb" detection Wed Nov 12 13:44:47 1997 Yukihiro Matsumoto <matz@netlab.co.jp> * time.c: remove coerce from Time class. Wed Nov 2 16:00:00 1997 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp> * string.c (str_sub_s): "".sub! "", "" => "\000" Thu Oct 30 16:54:01 1997 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp> * string.c (str_chop_bang): "".chop caused SEGV. * string.c (str_chomp_bang): method to chop out last newline. Mon Oct 27 13:49:13 1997 Yukihiro Matsumoto <matz@netlab.co.jp> * ext/extmk.rb.in: library may have pathname contains `.' * eval.c (rb_rescue): should not protect SystemError. Thu Oct 23 11:17:44 1997 Yukihiro Matsumoto <matz@netlab.co.jp> * range.c (range_eqq): fixnum check for last needed too. Wed Oct 22 12:52:30 1997 Yukihiro Matsumoto <matz@netlab.co.jp> * array.c (ary_join): call ary_join() recursively for the 1st array element. Co-authored-by: WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
Diffstat (limited to 'string.c')
-rw-r--r--string.c18
1 files changed, 10 insertions, 8 deletions
diff --git a/string.c b/string.c
index 91bb1da..a9f3fc5 100644
--- a/string.c
+++ b/string.c
@@ -812,7 +812,7 @@ str_sub_s(str, pat, val, once)
* Always consume at least one character of the input string
* in order to prevent infinite loops.
*/
- str_cat(result, str->ptr+END(0), 1);
+ if (str->len) str_cat(result, str->ptr+END(0), 1);
offset = END(0)+1;
}
else {
@@ -898,7 +898,7 @@ str_sub_iter_s(str, pat, once)
val = rb_yield(reg_nth_match(0, backref_get()));
val = obj_as_string(val);
str_cat(result, RSTRING(val)->ptr, RSTRING(val)->len);
- if (null) {
+ if (null && str->len) {
str_cat(result, str->ptr+offset-1, 1);
}
@@ -1551,7 +1551,7 @@ tr_setup_table(str, table)
{
struct tr tr;
int i, cflag = 0;
- char c;
+ int c;
tr.p = str->ptr; tr.pend = tr.p + str->len;
tr.gen = tr.now = tr.max = 0;
@@ -1914,13 +1914,15 @@ str_chop_bang(str)
{
str_modify(str);
- str->len--;
- if (str->ptr[str->len] == '\n') {
- if (str->len > 0 && str->ptr[str->len-1] == '\r') {
- str->len--;
+ if (str->len > 0) {
+ str->len--;
+ if (str->ptr[str->len] == '\n') {
+ if (str->len > 0 && str->ptr[str->len-1] == '\r') {
+ str->len--;
+ }
}
+ str->ptr[str->len] = '\0';
}
- str->ptr[str->len] = '\0';
return (VALUE)str;
}