Skip to content

Commit 237630f

Browse files
committed
po parser: fix a too much unescape bug
1 parent 9b9d736 commit 237630f

1 file changed

Lines changed: 27 additions & 25 deletions

File tree

lib/gettext/po_parser.rb

Lines changed: 27 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
#
1010
# DO NOT MODIFY!!!!
11-
# This file is automatically generated by Racc 1.7.0
11+
# This file is automatically generated by Racc 1.7.1
1212
# from Racc grammar file "".
1313
#
1414

@@ -19,7 +19,7 @@
1919
module GetText
2020
class POParser < Racc::Parser
2121

22-
module_eval(<<'...end po_parser.ry/module_eval...', 'po_parser.ry', 123)
22+
module_eval(<<'...end po_parser.ry/module_eval...', 'po_parser.ry', 122)
2323
if GetText.respond_to?(:bindtextdomain)
2424
include GetText
2525
GetText.bindtextdomain("gettext")
@@ -44,20 +44,23 @@ def report_warning?
4444
@report_warning
4545
end
4646
47-
def unescape(orig)
48-
ret = orig.gsub(/\\n/, "\n")
49-
ret.gsub!(/\\t/, "\t")
50-
ret.gsub!(/\\r/, "\r")
51-
ret.gsub!(/\\"/, "\"")
52-
ret
47+
def unescape(string)
48+
string.gsub(/\\(.)/) do
49+
escaped_character = $1
50+
case escaped_character
51+
when "t"
52+
"\t"
53+
when "r"
54+
"\r"
55+
when "n"
56+
"\n"
57+
else
58+
escaped_character
59+
end
60+
end
5361
end
5462
private :unescape
5563
56-
def unescape_string(string)
57-
string.gsub(/\\\\/, "\\")
58-
end
59-
private :unescape_string
60-
6164
def parse(str, data)
6265
@translator_comments = []
6366
@extracted_comments = []
@@ -102,7 +105,7 @@ def parse(str, data)
102105
@q.push [:COMMENT, $&]
103106
str = $'
104107
when /\A\"(.*)\"/
105-
@q.push [:STRING, unescape_string($1)]
108+
@q.push [:STRING, unescape($1)]
106109
str = $'
107110
else
108111
#c = str[0,1]
@@ -387,7 +390,7 @@ def parse_flags_line(line)
387390

388391
module_eval(<<'.,.,', 'po_parser.ry', 26)
389392
def _reduce_5(val, _values, result)
390-
@msgctxt = unescape(val[1])
393+
@msgctxt = val[1]
391394
392395
result
393396
end
@@ -399,9 +402,8 @@ def _reduce_5(val, _values, result)
399402

400403
module_eval(<<'.,.,', 'po_parser.ry', 38)
401404
def _reduce_8(val, _values, result)
402-
msgid_raw = val[1]
403-
msgid = unescape(msgid_raw)
404-
msgstr = unescape(val[3])
405+
msgid = val[1]
406+
msgstr = val[3]
405407
use_message_p = true
406408
if @fuzzy and not msgid.empty?
407409
use_message_p = (not ignore_fuzzy?)
@@ -411,7 +413,7 @@ def _reduce_8(val, _values, result)
411413
else
412414
$stderr.print _("Warning: fuzzy message was used.\n")
413415
end
414-
$stderr.print " #{@po_file}: msgid '#{msgid_raw}'\n"
416+
$stderr.print " #{@po_file}: msgid '#{msgid}'\n"
415417
end
416418
end
417419
@fuzzy = false
@@ -422,7 +424,7 @@ def _reduce_8(val, _values, result)
422424
end
423425
.,.,
424426

425-
module_eval(<<'.,.,', 'po_parser.ry', 61)
427+
module_eval(<<'.,.,', 'po_parser.ry', 60)
426428
def _reduce_9(val, _values, result)
427429
if @fuzzy and ignore_fuzzy?
428430
if val[1] != ""
@@ -444,7 +446,7 @@ def _reduce_9(val, _values, result)
444446
end
445447
.,.,
446448

447-
module_eval(<<'.,.,', 'po_parser.ry', 82)
449+
module_eval(<<'.,.,', 'po_parser.ry', 81)
448450
def _reduce_10(val, _values, result)
449451
if val[0].size > 0
450452
result = val[0] + "\000" + val[1]
@@ -458,31 +460,31 @@ def _reduce_10(val, _values, result)
458460

459461
# reduce 11 omitted
460462

461-
module_eval(<<'.,.,', 'po_parser.ry', 94)
463+
module_eval(<<'.,.,', 'po_parser.ry', 93)
462464
def _reduce_12(val, _values, result)
463465
result = val[2]
464466
465467
result
466468
end
467469
.,.,
468470

469-
module_eval(<<'.,.,', 'po_parser.ry', 101)
471+
module_eval(<<'.,.,', 'po_parser.ry', 100)
470472
def _reduce_13(val, _values, result)
471473
on_comment(val[0])
472474
473475
result
474476
end
475477
.,.,
476478

477-
module_eval(<<'.,.,', 'po_parser.ry', 109)
479+
module_eval(<<'.,.,', 'po_parser.ry', 108)
478480
def _reduce_14(val, _values, result)
479481
result = val.delete_if{|item| item == ""}.join
480482
481483
result
482484
end
483485
.,.,
484486

485-
module_eval(<<'.,.,', 'po_parser.ry', 113)
487+
module_eval(<<'.,.,', 'po_parser.ry', 112)
486488
def _reduce_15(val, _values, result)
487489
result = val[0]
488490

0 commit comments

Comments
 (0)