* Bug 15817 fixed: now ascii(c) with c>=128 does not crash on OSX 76/20576/2
Stéphane Mottelet [Mon, 22 Oct 2018 17:09:46 +0000 (19:09 +0200)]
http://bugzilla.scilab.org/show_bug.cgi?id=15817

Change-Id: I7b9eb67254101255ac97e2051b9a5f5392920ca0

scilab/CHANGES.md
scilab/modules/localization/src/c/charEncoding.c
scilab/modules/localization/tests/nonreg_tests/bug_15817.dia.ref [new file with mode: 0644]
scilab/modules/localization/tests/nonreg_tests/bug_15817.tst [new file with mode: 0644]

index 62f7f6a..4849e41 100644 (file)
@@ -631,6 +631,7 @@ Known issues
 * [#15814](http://bugzilla.scilab.org/show_bug.cgi?id=15814): Selecting graphic children with booleans yielded an error.
 * [#15815](http://bugzilla.scilab.org/show_bug.cgi?id=15815): After `polarplot()`, reversing axes or switching `gca().rotation_angles` shifted all angular and radial labels.
 * [#15816](http://bugzilla.scilab.org/show_bug.cgi?id=15816): `polarplot()`, `pie()`, `mesh()` and  `contourf()` ignored / canceled any upstream `drawlater`.
+* [#15817](http://bugzilla.scilab.org/show_bug.cgi?id=15817): `ascii(c)` with c>=128 crashed on OSX.
 * [#15818](http://bugzilla.scilab.org/show_bug.cgi?id=15818): `polarplot()` example could not be subplotted. `polarplot`'s demo did not display 'View code' and too often prompted the user.
 * [#15847](http://bugzilla.scilab.org/show_bug.cgi?id=15847): Scilab crashed at startup.
 * [#15854](http://bugzilla.scilab.org/show_bug.cgi?id=15854): `horner(1:$,4)` yielded an error. Extractions from `cblock` tables were impacted.
index e0ee5b6..84bb694 100644 (file)
@@ -113,86 +113,7 @@ int wcstat(char* filename, struct _stat *st)
     return stat_result;
 }
 /*--------------------------------------------------------------------------*/
-#else
-/*--------------------------------------------------------------------------*/
-#ifdef __APPLE__ // Mac OS X
-/*--------------------------------------------------------------------------*/
-char *wide_string_to_UTF8(const wchar_t *_wide)
-{
-    size_t iCharLen = 0;
-    wchar_t *pwstr = _wide;
-    char* pchar = NULL;
-    /* The value of MB_CUR_MAX is the maximum number of bytes
-    in a multibyte character for the current locale. */
-    int iMaxLen =  0;
-
-    if (_wide == NULL)
-    {
-        return NULL;
-    }
-
-    iMaxLen =  (int)wcslen(_wide) * MB_CUR_MAX ;
-
-    pchar = (char*) MALLOC(( iMaxLen + 1) * sizeof(char));
-    if (pchar == NULL)
-    {
-        return NULL;
-    }
-    iCharLen = wcstombs (pchar, pwstr, iMaxLen);
-    if ( iCharLen == (size_t)(-1) )
-    {
-        if (pchar)
-        {
-            FREE(pchar);
-            pchar = NULL;
-        }
-        return NULL;
-    }
-    pchar[iCharLen] = '\0';
-    return pchar;
-}
-/*--------------------------------------------------------------------------*/
-wchar_t *to_wide_string(const char *_UTFStr)
-{
-    wchar_t *_buf = NULL;
-    size_t pszLen = 0;
-    char *psz = _UTFStr;
-    mbstate_t ps;
-
-    if (_UTFStr == NULL)
-    {
-        return NULL;
-    }
-
-    memset (&ps, 0x00, sizeof(ps));
-    pszLen = mbsrtowcs(NULL, (const char**)&psz, 0, &ps);
-
-    if ( pszLen == (size_t)(-1) )
-    {
-        return NULL;
-    }
-
-    _buf = (wchar_t*)MALLOC((pszLen + 1) * sizeof(wchar_t));
-    if (_buf == NULL)
-    {
-        return NULL;
-    }
-
-    pszLen = mbsrtowcs(_buf, (const char**)&psz, (int)strlen(psz), &ps);
-
-    if ( pszLen == (size_t)(-1) )
-    {
-        FREE(_buf);
-        return NULL;
-    }
-    else
-    {
-        _buf[pszLen] = L'\0';
-    }
-    return _buf;
-}
-/*--------------------------------------------------------------------------*/
-#else // Linux
+#else // Linux or Mac OS X
 /*--------------------------------------------------------------------------*/
 char *wide_string_to_UTF8(const wchar_t *_wide)
 {
@@ -280,8 +201,6 @@ wchar_t *to_wide_string(const char *_UTFStr)
     return pOutSave;
 }
 /*--------------------------------------------------------------------------*/
-#endif
-/*--------------------------------------------------------------------------*/
 int wcstat(char* filename, struct stat *st)
 {
     return stat(filename, st);
diff --git a/scilab/modules/localization/tests/nonreg_tests/bug_15817.dia.ref b/scilab/modules/localization/tests/nonreg_tests/bug_15817.dia.ref
new file mode 100644 (file)
index 0000000..7a41f32
--- /dev/null
@@ -0,0 +1,19 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2018 - Stéphane MOTTELET
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- MACOSX ONLY -->
+// <-- CLI SHELL MODE -->
+//
+// <-- Non-regression test for bug 15817 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=15817
+//
+// <-- Short Description -->
+// ascii(c); with c>=128 crashes on OSX
+ascii(255)
+ ans  =
+ ÿ
diff --git a/scilab/modules/localization/tests/nonreg_tests/bug_15817.tst b/scilab/modules/localization/tests/nonreg_tests/bug_15817.tst
new file mode 100644 (file)
index 0000000..1fa2032
--- /dev/null
@@ -0,0 +1,18 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2018 - Stéphane MOTTELET
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- MACOSX ONLY -->
+// <-- CLI SHELL MODE -->
+//
+// <-- Non-regression test for bug 15817 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=15817
+//
+// <-- Short Description -->
+// ascii(c); with c>=128 crashes on OSX
+
+ascii(255)
\ No newline at end of file