[asterisk-bugs] [JIRA] (ASTERISK-29297) Y2021 problem – Asterisk cannot say year 2021 in Dutch

Jacek Konieczny (JIRA) noreply at issues.asterisk.org
Wed Feb 17 03:36:14 CST 2021


     [ https://issues.asterisk.org/jira/browse/ASTERISK-29297?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Jacek Konieczny updated ASTERISK-29297:
---------------------------------------

    Description: 
Our customers reported voicemail menu failing when about to say a message date. Logs show missing sound:

{noformat}
Feb 17 09:10:34]     -- <PJSIP/ykmf7-0000010d> Playing 'vm-password.alaw' (language 'nl')
[Feb 17 09:10:38]        > 0x7f55004b0650 -- Strict RTP learning complete - Locking on source address xxxxx:11978
[Feb 17 09:10:39]     -- <PJSIP/ykmf7-0000010d> Playing 'vm-youhave.alaw' (language 'nl')
[Feb 17 09:10:40]     -- <PJSIP/ykmf7-0000010d> Playing 'digits/1.alaw' (language 'nl')
[Feb 17 09:10:40]     -- <PJSIP/ykmf7-0000010d> Playing 'vm-first.alaw' (language 'nl')
[Feb 17 09:10:41]     -- <PJSIP/ykmf7-0000010d> Playing 'vm-message.alaw' (language 'nl')
[Feb 17 09:10:41]     -- <PJSIP/ykmf7-0000010d> Playing 'vm-received.alaw' (language 'nl')
[Feb 17 09:10:42]     -- <PJSIP/ykmf7-0000010d> Playing 'digits/day-1.alaw' (language 'nl')
[Feb 17 09:10:43]     -- <PJSIP/ykmf7-0000010d> Playing 'digits/1.alaw' (language 'nl')
[Feb 17 09:10:43]     -- <PJSIP/ykmf7-0000010d> Playing 'digits/mon-1.alaw' (language 'nl')
[Feb 17 09:10:45]     -- <PJSIP/ykmf7-0000010d> Playing 'digits/2.alaw' (language 'nl')
[Feb 17 09:10:45]     -- <PJSIP/ykmf7-0000010d> Playing 'digits/thousand.alaw' (language 'nl')
[Feb 17 09:10:47] WARNING[26658][C-000000b3]: file.c:789 ast_openstream_full: File digits/21 does not exist in any format
[Feb 17 09:10:47] WARNING[26658][C-000000b3]: file.c:1262 ast_streamfile: Unable to open digits/21 (format (alaw)): No such file or directory
[Feb 17 09:10:47] WARNING[26658][C-000000b3]: say.c:472 wait_file: Unable to play message digits/21
[Feb 17 09:10:47]   == Spawn extension (from-internal, *98666, 6) exited non-zero on 'PJSIP/ykmf7-0000010d'
{noformat}

I traced the problem to the {{ast_say_date_with_format_nl()}} function and it clearly does not support years later than 2020. It was an older Asterisk version (16.9.0), but I can see the same, wrong, lazy code in the current 18.2.0 release:

{noformat}
                        case 'Y':                                               
                                /* Year */                                      
                                if (tm.tm_year > 99) {                          
                                        res = wait_file(chan, ints, "digits/2", lang);
                                        if (!res) {                             
                                                res = wait_file(chan, ints, "digits/thousand", lang);
                                        }                                       
                                        if (tm.tm_year > 100) {                 
                                                if (!res) {                     
                                                        /* This works until the end of 2020 */
                                                        snprintf(nextmsg, sizeof(nextmsg), "digits/%d", tm.tm_year - 100);
                                                        res = wait_file(chan, ints, nextmsg, lang);
                                                }                               
                                        }         
{noformat}

There is no problem when English language is used, but it may affect other than Dutch languages too (I have not checked that).

  was:
Our customers reported voicemail menu failing when about to say a message date. Logs show missing sound:

{noformat}
Feb 17 09:10:34]     -- <PJSIP/ykmf7-0000010d> Playing 'vm-password.alaw' (language 'nl')
[Feb 17 09:10:38]        > 0x7f55004b0650 -- Strict RTP learning complete - Locking on source address 94.246.148.140:11978
[Feb 17 09:10:39]     -- <PJSIP/ykmf7-0000010d> Playing 'vm-youhave.alaw' (language 'nl')
[Feb 17 09:10:40]     -- <PJSIP/ykmf7-0000010d> Playing 'digits/1.alaw' (language 'nl')
[Feb 17 09:10:40]     -- <PJSIP/ykmf7-0000010d> Playing 'vm-first.alaw' (language 'nl')
[Feb 17 09:10:41]     -- <PJSIP/ykmf7-0000010d> Playing 'vm-message.alaw' (language 'nl')
[Feb 17 09:10:41]     -- <PJSIP/ykmf7-0000010d> Playing 'vm-received.alaw' (language 'nl')
[Feb 17 09:10:42]     -- <PJSIP/ykmf7-0000010d> Playing 'digits/day-1.alaw' (language 'nl')
[Feb 17 09:10:43]     -- <PJSIP/ykmf7-0000010d> Playing 'digits/1.alaw' (language 'nl')
[Feb 17 09:10:43]     -- <PJSIP/ykmf7-0000010d> Playing 'digits/mon-1.alaw' (language 'nl')
[Feb 17 09:10:45]     -- <PJSIP/ykmf7-0000010d> Playing 'digits/2.alaw' (language 'nl')
[Feb 17 09:10:45]     -- <PJSIP/ykmf7-0000010d> Playing 'digits/thousand.alaw' (language 'nl')
[Feb 17 09:10:47] WARNING[26658][C-000000b3]: file.c:789 ast_openstream_full: File digits/21 does not exist in any format
[Feb 17 09:10:47] WARNING[26658][C-000000b3]: file.c:1262 ast_streamfile: Unable to open digits/21 (format (alaw)): No such file or directory
[Feb 17 09:10:47] WARNING[26658][C-000000b3]: say.c:472 wait_file: Unable to play message digits/21
[Feb 17 09:10:47]   == Spawn extension (from-internal, *98666, 6) exited non-zero on 'PJSIP/ykmf7-0000010d'
{noformat}

I traced the problem to the {{ast_say_date_with_format_nl()}} function and it clearly does not support years later than 2020. It was an older Asterisk version (16.9.0), but I can see the same, wrong, lazy code in the current 18.2.0 release:

{noformat}
                        case 'Y':                                               
                                /* Year */                                      
                                if (tm.tm_year > 99) {                          
                                        res = wait_file(chan, ints, "digits/2", lang);
                                        if (!res) {                             
                                                res = wait_file(chan, ints, "digits/thousand", lang);
                                        }                                       
                                        if (tm.tm_year > 100) {                 
                                                if (!res) {                     
                                                        /* This works until the end of 2020 */
                                                        snprintf(nextmsg, sizeof(nextmsg), "digits/%d", tm.tm_year - 100);
                                                        res = wait_file(chan, ints, nextmsg, lang);
                                                }                               
                                        }         
{noformat}

There is no problem when English language is used, but it may affect other than Dutch languages too (I have not checked that).


> Y2021 problem – Asterisk cannot say year 2021 in Dutch
> ------------------------------------------------------
>
>                 Key: ASTERISK-29297
>                 URL: https://issues.asterisk.org/jira/browse/ASTERISK-29297
>             Project: Asterisk
>          Issue Type: Bug
>      Security Level: None
>          Components: Core/Internationalization
>    Affects Versions: 16.9.0, 18.2.0
>            Reporter: Jacek Konieczny
>            Severity: Major
>
> Our customers reported voicemail menu failing when about to say a message date. Logs show missing sound:
> {noformat}
> Feb 17 09:10:34]     -- <PJSIP/ykmf7-0000010d> Playing 'vm-password.alaw' (language 'nl')
> [Feb 17 09:10:38]        > 0x7f55004b0650 -- Strict RTP learning complete - Locking on source address xxxxx:11978
> [Feb 17 09:10:39]     -- <PJSIP/ykmf7-0000010d> Playing 'vm-youhave.alaw' (language 'nl')
> [Feb 17 09:10:40]     -- <PJSIP/ykmf7-0000010d> Playing 'digits/1.alaw' (language 'nl')
> [Feb 17 09:10:40]     -- <PJSIP/ykmf7-0000010d> Playing 'vm-first.alaw' (language 'nl')
> [Feb 17 09:10:41]     -- <PJSIP/ykmf7-0000010d> Playing 'vm-message.alaw' (language 'nl')
> [Feb 17 09:10:41]     -- <PJSIP/ykmf7-0000010d> Playing 'vm-received.alaw' (language 'nl')
> [Feb 17 09:10:42]     -- <PJSIP/ykmf7-0000010d> Playing 'digits/day-1.alaw' (language 'nl')
> [Feb 17 09:10:43]     -- <PJSIP/ykmf7-0000010d> Playing 'digits/1.alaw' (language 'nl')
> [Feb 17 09:10:43]     -- <PJSIP/ykmf7-0000010d> Playing 'digits/mon-1.alaw' (language 'nl')
> [Feb 17 09:10:45]     -- <PJSIP/ykmf7-0000010d> Playing 'digits/2.alaw' (language 'nl')
> [Feb 17 09:10:45]     -- <PJSIP/ykmf7-0000010d> Playing 'digits/thousand.alaw' (language 'nl')
> [Feb 17 09:10:47] WARNING[26658][C-000000b3]: file.c:789 ast_openstream_full: File digits/21 does not exist in any format
> [Feb 17 09:10:47] WARNING[26658][C-000000b3]: file.c:1262 ast_streamfile: Unable to open digits/21 (format (alaw)): No such file or directory
> [Feb 17 09:10:47] WARNING[26658][C-000000b3]: say.c:472 wait_file: Unable to play message digits/21
> [Feb 17 09:10:47]   == Spawn extension (from-internal, *98666, 6) exited non-zero on 'PJSIP/ykmf7-0000010d'
> {noformat}
> I traced the problem to the {{ast_say_date_with_format_nl()}} function and it clearly does not support years later than 2020. It was an older Asterisk version (16.9.0), but I can see the same, wrong, lazy code in the current 18.2.0 release:
> {noformat}
>                         case 'Y':                                               
>                                 /* Year */                                      
>                                 if (tm.tm_year > 99) {                          
>                                         res = wait_file(chan, ints, "digits/2", lang);
>                                         if (!res) {                             
>                                                 res = wait_file(chan, ints, "digits/thousand", lang);
>                                         }                                       
>                                         if (tm.tm_year > 100) {                 
>                                                 if (!res) {                     
>                                                         /* This works until the end of 2020 */
>                                                         snprintf(nextmsg, sizeof(nextmsg), "digits/%d", tm.tm_year - 100);
>                                                         res = wait_file(chan, ints, nextmsg, lang);
>                                                 }                               
>                                         }         
> {noformat}
> There is no problem when English language is used, but it may affect other than Dutch languages too (I have not checked that).



--
This message was sent by Atlassian JIRA
(v6.2#6252)



More information about the asterisk-bugs mailing list