|
Jens Petersen |
3b29a5 |
From: Bruno Haible <bruno@clisp.org>
|
|
Jens Petersen |
3b29a5 |
Subject: Fix xgettext crash when extracting a message with plural that is excluded.
|
|
Jens Petersen |
3b29a5 |
Bug-Debian: http://bugs.debian.org/608181
|
|
Jens Petersen |
3b29a5 |
X-Debian-version: 0.18.1.1-4
|
|
Jens Petersen |
3b29a5 |
|
|
Jens Petersen |
3b29a5 |
--- a/gettext-tools/src/xgettext.c
|
|
Jens Petersen |
3b29a5 |
+++ b/gettext-tools/src/xgettext.c
|
|
Jens Petersen |
3b29a5 |
@@ -1,5 +1,5 @@
|
|
Jens Petersen |
3b29a5 |
/* Extracts strings from C source file to Uniforum style .po file.
|
|
Jens Petersen |
3b29a5 |
- Copyright (C) 1995-1998, 2000-2010 Free Software Foundation, Inc.
|
|
Jens Petersen |
3b29a5 |
+ Copyright (C) 1995-1998, 2000-2011 Free Software Foundation, Inc.
|
|
Jens Petersen |
3b29a5 |
Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, April 1995.
|
|
Jens Petersen |
3b29a5 |
|
|
Jens Petersen |
3b29a5 |
This program is free software: you can redistribute it and/or modify
|
|
Jens Petersen |
3b29a5 |
@@ -2933,7 +2933,7 @@
|
|
Jens Petersen |
3b29a5 |
msgid_context,
|
|
Jens Petersen |
3b29a5 |
&best_cp->msgid_pos,
|
|
Jens Petersen |
3b29a5 |
NULL, best_cp->msgid_comment);
|
|
Jens Petersen |
3b29a5 |
- if (best_cp->msgid_plural != NULL)
|
|
Jens Petersen |
3b29a5 |
+ if (mp != NULL && best_cp->msgid_plural != NULL)
|
|
Jens Petersen |
3b29a5 |
remember_a_message_plural (mp, best_cp->msgid_plural,
|
|
Jens Petersen |
3b29a5 |
msgid_plural_context,
|
|
Jens Petersen |
3b29a5 |
&best_cp->msgid_plural_pos,
|
|
Jens Petersen |
3b29a5 |
--- a/gettext-tools/src/xgettext.h
|
|
Jens Petersen |
3b29a5 |
+++ b/gettext-tools/src/xgettext.h
|
|
Jens Petersen |
3b29a5 |
@@ -1,5 +1,5 @@
|
|
Jens Petersen |
3b29a5 |
/* xgettext common functions.
|
|
Jens Petersen |
3b29a5 |
- Copyright (C) 2001-2003, 2005-2006, 2008-2009 Free Software Foundation, Inc.
|
|
Jens Petersen |
3b29a5 |
+ Copyright (C) 2001-2003, 2005-2006, 2008-2009, 2011 Free Software Foundation, Inc.
|
|
Jens Petersen |
3b29a5 |
Written by Peter Miller <millerp@canb.auug.org.au>
|
|
Jens Petersen |
3b29a5 |
and Bruno Haible <haible@clisp.cons.org>, 2001.
|
|
Jens Petersen |
3b29a5 |
|
|
Jens Petersen |
3b29a5 |
@@ -247,7 +247,8 @@
|
|
Jens Petersen |
3b29a5 |
or NULL.
|
|
Jens Petersen |
3b29a5 |
COMMENT may be savable_comment, or it may be a saved copy of savable_comment
|
|
Jens Petersen |
3b29a5 |
(then add_reference must be used when saving it, and drop_reference while
|
|
Jens Petersen |
3b29a5 |
- dropping it). Clear savable_comment. */
|
|
Jens Petersen |
3b29a5 |
+ dropping it). Clear savable_comment.
|
|
Jens Petersen |
3b29a5 |
+ Return the new or found message, or NULL if the message is excluded. */
|
|
Jens Petersen |
3b29a5 |
extern message_ty *remember_a_message (message_list_ty *mlp,
|
|
Jens Petersen |
3b29a5 |
char *msgctxt,
|
|
Jens Petersen |
3b29a5 |
char *msgid,
|
|
Jens Petersen |
3b29a5 |
--- a/gettext-tools/src/x-smalltalk.c
|
|
Jens Petersen |
3b29a5 |
+++ b/gettext-tools/src/x-smalltalk.c
|
|
Jens Petersen |
3b29a5 |
@@ -1,5 +1,5 @@
|
|
Jens Petersen |
3b29a5 |
/* xgettext Smalltalk backend.
|
|
Jens Petersen |
3b29a5 |
- Copyright (C) 2002-2003, 2005-2009 Free Software Foundation, Inc.
|
|
Jens Petersen |
3b29a5 |
+ Copyright (C) 2002-2003, 2005-2009, 2011 Free Software Foundation, Inc.
|
|
Jens Petersen |
3b29a5 |
|
|
Jens Petersen |
3b29a5 |
This file was written by Bruno Haible <haible@clisp.cons.org>, 2002.
|
|
Jens Petersen |
3b29a5 |
|
|
Jens Petersen |
3b29a5 |
@@ -562,9 +562,10 @@
|
|
Jens Petersen |
3b29a5 |
lex_pos_ty pos;
|
|
Jens Petersen |
3b29a5 |
pos.file_name = logical_file_name;
|
|
Jens Petersen |
3b29a5 |
pos.line_number = token.line_number;
|
|
Jens Petersen |
3b29a5 |
- remember_a_message_plural (plural_mp, token.string,
|
|
Jens Petersen |
3b29a5 |
- null_context, &pos,
|
|
Jens Petersen |
3b29a5 |
- savable_comment);
|
|
Jens Petersen |
3b29a5 |
+ if (plural_mp != NULL)
|
|
Jens Petersen |
3b29a5 |
+ remember_a_message_plural (plural_mp, token.string,
|
|
Jens Petersen |
3b29a5 |
+ null_context, &pos,
|
|
Jens Petersen |
3b29a5 |
+ savable_comment);
|
|
Jens Petersen |
3b29a5 |
state = 0;
|
|
Jens Petersen |
3b29a5 |
break;
|
|
Jens Petersen |
3b29a5 |
}
|
|
Jens Petersen |
3b29a5 |
--- a/gettext-tools/src/x-ycp.c
|
|
Jens Petersen |
3b29a5 |
+++ b/gettext-tools/src/x-ycp.c
|
|
Jens Petersen |
3b29a5 |
@@ -1,5 +1,5 @@
|
|
Jens Petersen |
3b29a5 |
/* xgettext YCP backend.
|
|
Jens Petersen |
3b29a5 |
- Copyright (C) 2001-2003, 2005-2009 Free Software Foundation, Inc.
|
|
Jens Petersen |
3b29a5 |
+ Copyright (C) 2001-2003, 2005-2009, 2011 Free Software Foundation, Inc.
|
|
Jens Petersen |
3b29a5 |
|
|
Jens Petersen |
3b29a5 |
This file was written by Bruno Haible <haible@clisp.cons.org>, 2001.
|
|
Jens Petersen |
3b29a5 |
|
|
Jens Petersen |
3b29a5 |
@@ -640,6 +640,7 @@
|
|
Jens Petersen |
3b29a5 |
bool in_i18n)
|
|
Jens Petersen |
3b29a5 |
{
|
|
Jens Petersen |
3b29a5 |
int state; /* 1 or 2 inside _( ... ), otherwise 0 */
|
|
Jens Petersen |
3b29a5 |
+ int plural_state = 0; /* defined only when in states 1 and 2 */
|
|
Jens Petersen |
3b29a5 |
message_ty *plural_mp = NULL; /* defined only when in states 1 and 2 */
|
|
Jens Petersen |
3b29a5 |
/* Context iterator that will be used if the next token is a '('. */
|
|
Jens Petersen |
3b29a5 |
flag_context_list_iterator_ty next_context_iter =
|
|
Jens Petersen |
3b29a5 |
@@ -678,20 +679,22 @@
|
|
Jens Petersen |
3b29a5 |
pos.file_name = logical_file_name;
|
|
Jens Petersen |
3b29a5 |
pos.line_number = token.line_number;
|
|
Jens Petersen |
3b29a5 |
|
|
Jens Petersen |
3b29a5 |
- if (plural_mp == NULL)
|
|
Jens Petersen |
3b29a5 |
+ if (plural_state == 0)
|
|
Jens Petersen |
3b29a5 |
{
|
|
Jens Petersen |
3b29a5 |
/* Seen an msgid. */
|
|
Jens Petersen |
3b29a5 |
plural_mp = remember_a_message (mlp, NULL, token.string,
|
|
Jens Petersen |
3b29a5 |
inner_context, &pos,
|
|
Jens Petersen |
3b29a5 |
NULL, token.comment);
|
|
Jens Petersen |
3b29a5 |
+ plural_state = 1;
|
|
Jens Petersen |
3b29a5 |
state = 2;
|
|
Jens Petersen |
3b29a5 |
}
|
|
Jens Petersen |
3b29a5 |
else
|
|
Jens Petersen |
3b29a5 |
{
|
|
Jens Petersen |
3b29a5 |
/* Seen an msgid_plural. */
|
|
Jens Petersen |
3b29a5 |
- remember_a_message_plural (plural_mp, token.string,
|
|
Jens Petersen |
3b29a5 |
- inner_context, &pos,
|
|
Jens Petersen |
3b29a5 |
- token.comment);
|
|
Jens Petersen |
3b29a5 |
+ if (plural_mp != NULL)
|
|
Jens Petersen |
3b29a5 |
+ remember_a_message_plural (plural_mp, token.string,
|
|
Jens Petersen |
3b29a5 |
+ inner_context, &pos,
|
|
Jens Petersen |
3b29a5 |
+ token.comment);
|
|
Jens Petersen |
3b29a5 |
state = 0;
|
|
Jens Petersen |
3b29a5 |
}
|
|
Jens Petersen |
3b29a5 |
drop_reference (token.comment);
|