1# Date: Mon, 27 Feb 2006 12:35:30 +0900
2# From: KIMURA Koichi <kimura.koichi@canon.co.jp>
3# Subject: gawk: sub_common has multi-byte aware bug
4# To: bug-gawk@gnu.org
5# Message-id: <20060227121045.2198.KIMURA.KOICHI@canon.co.jp>
6# 
7# Hi,
8# 
9# A certain user faced bug of sub builtin function and report to me.
10# Then I investigated the bug.
11# 
12# reproduce script is here.
13
14BEGIN {
15	str = "type=\"directory\" version=\"1.0\""
16	#print "BEGIN:", str
17
18	while (str) {
19		sub(/^[^=]*/, "", str);
20		s = substr(str, 2)
21		print s
22		sub(/^="[^"]*"/, "", str)
23		sub(/^[ \t]*/, "", str)
24	}
25}
26
27# and sample result is here (on GNU/Linux Fedora core 3)
28# 
29# [kbk@skuld gawk-3.1.5]$ LC_ALL=C ./gawk -f subbug.awk
30# "directory" version="1.0"
31# "1.0"
32# [kbk@skuld gawk-3.1.5]$ LC_ALL=en_US.UTF-8 ./gawk -f subbug.awk
33# "directory" version="1.0"
34# "dire
35# [kbk@skuld gawk-3.1.5]$
36# 
37# In my investigation, this bug is cause by don't release wide-string when
38# sub is executed.
39# 
40# patch is here.
41# 
42# --- builtin.c.orig	2005-07-27 03:07:43.000000000 +0900
43# +++ builtin.c	2006-02-26 02:07:52.000000000 +0900
44# @@ -2463,6 +2468,15 @@ sub_common(NODE *tree, long how_many, in
45#  	t->stptr = buf;
46#  	t->stlen = textlen;
47# 
48# +#ifdef MBS_SUPPORT
49# +    if (t->flags & WSTRCUR) {
50# +        if (t->wstptr != NULL)
51# +            free(t->wstptr);
52# +        t->wstptr = NULL;
53# +        t->wstlen = 0;
54# +        t->flags &= ~WSTRCUR;
55# +    }
56# +#endif
57#  	free_temp(s);
58#  	if (matches > 0 && lhs) {
59#  		if (priv) {
60# 
61# 
62# -- 
63# KIMURA Koichi
64# 
65# 
66# #####################################################################################
67# This Mail Was Scanned by 012.net AntiVirus Service1- Powered by TrendMicro Interscan
68# 
69