Fix a crash when saying certain numbers in Chinese
authorMark Michelson <mmichelson@digium.com>
Wed, 21 Jan 2009 22:10:02 +0000 (22:10 +0000)
committerMark Michelson <mmichelson@digium.com>
Wed, 21 Jan 2009 22:10:02 +0000 (22:10 +0000)
This commit fixes a crash that was occurring when attempting to
say a number between 10000 and 100000 due to dividing by 0.

This also removes some places where a "zero" is spoken when it
should not be.

(closes issue #14291)
Reported by: dant
Patches:
      say.c-14291.diff uploaded by dant (license 670)
Tested by: dant

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@169794 65c4cc65-6c06-0410-ace0-fbb531ad65f3

main/say.c

index 943ccaf..46b7d05 100644 (file)
@@ -2308,11 +2308,6 @@ static int ast_say_number_full_tw(struct ast_channel *chan, int num, const char
                                        num -= ((num / 100) * 100);
                                } else if (num < 10000){
                                        snprintf(buf, 10, "%d", num);
-                                       if (last_length - strlen(buf) > 1 && last_length != 0 && last_length % strlen(buf) > 0) {
-                                               last_length = strlen(buf);
-                                               playz++;
-                                               continue;
-                                       }
                                        snprintf(fn, sizeof(fn), "digits/%d", (num / 1000));
                                        playt++;
                                        snprintf(buf, 10, "%d", num);
@@ -2323,9 +2318,6 @@ static int ast_say_number_full_tw(struct ast_channel *chan, int num, const char
                                                res = ast_say_number_full_tw(chan, num / 10000, ints, language, audiofd, ctrlfd);
                                                if (res)
                                                        return res;
-                                               if (((num / 10000) % (num/100000)) == 0)
-                                                       playz++;
-
                                                snprintf(buf, 10, "%d", num);
                                                ast_log(LOG_DEBUG, "Number '%d' %d %d\n", num, (int)strlen(buf), last_length);
                                                num -= ((num / 10000) * 10000);