diff options
author | Bruno Haible <bruno@clisp.org> | 2011-07-30 04:14:27 +0200 |
---|---|---|
committer | Bruno Haible <bruno@clisp.org> | 2011-07-30 04:15:11 +0200 |
commit | 0126b03f01a65ce543989a1d1f1d73b7d2c65a09 (patch) | |
tree | 91e4ed4910b9925e30da496a7ebd9677c6c11a37 | |
parent | cdf2e8d214e5895bc35be57264f26c582f523eb0 (diff) | |
download | external_gettext-0126b03f01a65ce543989a1d1f1d73b7d2c65a09.zip external_gettext-0126b03f01a65ce543989a1d1f1d73b7d2c65a09.tar.gz external_gettext-0126b03f01a65ce543989a1d1f1d73b7d2c65a09.tar.bz2 |
Fix xgettext crash when extracting a message with plural that is excluded.
-rw-r--r-- | gettext-tools/src/ChangeLog | 12 | ||||
-rw-r--r-- | gettext-tools/src/x-smalltalk.c | 9 | ||||
-rw-r--r-- | gettext-tools/src/x-ycp.c | 13 | ||||
-rw-r--r-- | gettext-tools/src/xgettext.c | 4 | ||||
-rw-r--r-- | gettext-tools/src/xgettext.h | 5 |
5 files changed, 30 insertions, 13 deletions
diff --git a/gettext-tools/src/ChangeLog b/gettext-tools/src/ChangeLog index 7ede006..842dada 100644 --- a/gettext-tools/src/ChangeLog +++ b/gettext-tools/src/ChangeLog @@ -1,3 +1,15 @@ +2011-07-29 Bruno Haible <bruno@clisp.org> + + Fix xgettext crash when extracting a message with plural that is + excluded. + * xgettext.h (remember_a_message): Document the return value. + * xgettext.c (arglist_parser_done): Handle the case where + remember_a_message returned NULL. + * x-smalltalk.c (extract_smalltalk): Likewise. + * x-ycp.c (extract_parenthesized): Likewise. + Reported by Jean-Luc Coulon <jean-luc.coulon@wanadoo.fr> via + Santiago Vila <sanvila@unex.es>. + 2011-06-13 Bruno Haible <bruno@clisp.org> Avoid compilation error on Solaris 7 with cc. diff --git a/gettext-tools/src/x-smalltalk.c b/gettext-tools/src/x-smalltalk.c index dbd0aa5..c3f9699 100644 --- a/gettext-tools/src/x-smalltalk.c +++ b/gettext-tools/src/x-smalltalk.c @@ -1,5 +1,5 @@ /* xgettext Smalltalk backend. - Copyright (C) 2002-2003, 2005-2009 Free Software Foundation, Inc. + Copyright (C) 2002-2003, 2005-2009, 2011 Free Software Foundation, Inc. This file was written by Bruno Haible <haible@clisp.cons.org>, 2002. @@ -562,9 +562,10 @@ extract_smalltalk (FILE *f, lex_pos_ty pos; pos.file_name = logical_file_name; pos.line_number = token.line_number; - remember_a_message_plural (plural_mp, token.string, - null_context, &pos, - savable_comment); + if (plural_mp != NULL) + remember_a_message_plural (plural_mp, token.string, + null_context, &pos, + savable_comment); state = 0; break; } diff --git a/gettext-tools/src/x-ycp.c b/gettext-tools/src/x-ycp.c index 4e3b590..ff8642b 100644 --- a/gettext-tools/src/x-ycp.c +++ b/gettext-tools/src/x-ycp.c @@ -1,5 +1,5 @@ /* xgettext YCP backend. - Copyright (C) 2001-2003, 2005-2009 Free Software Foundation, Inc. + Copyright (C) 2001-2003, 2005-2009, 2011 Free Software Foundation, Inc. This file was written by Bruno Haible <haible@clisp.cons.org>, 2001. @@ -640,6 +640,7 @@ extract_parenthesized (message_list_ty *mlp, bool in_i18n) { int state; /* 1 or 2 inside _( ... ), otherwise 0 */ + int plural_state = 0; /* defined only when in states 1 and 2 */ message_ty *plural_mp = NULL; /* defined only when in states 1 and 2 */ /* Context iterator that will be used if the next token is a '('. */ flag_context_list_iterator_ty next_context_iter = @@ -678,20 +679,22 @@ extract_parenthesized (message_list_ty *mlp, pos.file_name = logical_file_name; pos.line_number = token.line_number; - if (plural_mp == NULL) + if (plural_state == 0) { /* Seen an msgid. */ plural_mp = remember_a_message (mlp, NULL, token.string, inner_context, &pos, NULL, token.comment); + plural_state = 1; state = 2; } else { /* Seen an msgid_plural. */ - remember_a_message_plural (plural_mp, token.string, - inner_context, &pos, - token.comment); + if (plural_mp != NULL) + remember_a_message_plural (plural_mp, token.string, + inner_context, &pos, + token.comment); state = 0; } drop_reference (token.comment); diff --git a/gettext-tools/src/xgettext.c b/gettext-tools/src/xgettext.c index faf8161..3388820 100644 --- a/gettext-tools/src/xgettext.c +++ b/gettext-tools/src/xgettext.c @@ -1,5 +1,5 @@ /* Extracts strings from C source file to Uniforum style .po file. - Copyright (C) 1995-1998, 2000-2010 Free Software Foundation, Inc. + Copyright (C) 1995-1998, 2000-2011 Free Software Foundation, Inc. Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, April 1995. This program is free software: you can redistribute it and/or modify @@ -2934,7 +2934,7 @@ arglist_parser_done (struct arglist_parser *ap, int argnum) msgid_context, &best_cp->msgid_pos, NULL, best_cp->msgid_comment); - if (best_cp->msgid_plural != NULL) + if (mp != NULL && best_cp->msgid_plural != NULL) remember_a_message_plural (mp, best_cp->msgid_plural, msgid_plural_context, &best_cp->msgid_plural_pos, diff --git a/gettext-tools/src/xgettext.h b/gettext-tools/src/xgettext.h index 6b2c535..16540fe 100644 --- a/gettext-tools/src/xgettext.h +++ b/gettext-tools/src/xgettext.h @@ -1,5 +1,5 @@ /* xgettext common functions. - Copyright (C) 2001-2003, 2005-2006, 2008-2009 Free Software Foundation, Inc. + Copyright (C) 2001-2003, 2005-2006, 2008-2009, 2011 Free Software Foundation, Inc. Written by Peter Miller <millerp@canb.auug.org.au> and Bruno Haible <haible@clisp.cons.org>, 2001. @@ -247,7 +247,8 @@ extern void savable_comment_reset (void); or NULL. COMMENT may be savable_comment, or it may be a saved copy of savable_comment (then add_reference must be used when saving it, and drop_reference while - dropping it). Clear savable_comment. */ + dropping it). Clear savable_comment. + Return the new or found message, or NULL if the message is excluded. */ extern message_ty *remember_a_message (message_list_ty *mlp, char *msgctxt, char *msgid, |