https://tracker.crystax.net/https://tracker.crystax.net/favicon.ico?15359200272016-04-07T14:29:26ZIssue trackerCrystaX NDK - Bug #1360: CRYSTAX_PANI: issetugid() not implemented!!! when calling boost::locale::conv::to_utf (10.3.1)https://tracker.crystax.net/issues/1360?journal_id=30862016-04-07T14:29:26ZDmitry M.dm@crystax.net
<ul></ul><p>Yes, <code>issetugid</code> is not implemented in libcrystax. When it's called, it prints error message to stderr and abort application. Honestly speaking, it's unclear how to properly implement this function, since its definition is unclear too. According to the documentation, it's purpose is indication of the fact that process was "tainted", which is very foggy.</p>
<p>Anyway, we're going to fix it in upcoming 11.0 release, where we'd get rid of hybrid libcrystax+bionic scheme, keeping only libcrystax in place. Meanwhile, you can work around this by defining own version of <code>issetugid</code> somewhere in your code:</p>
<pre><code class="cpp syntaxhl" data-language="cpp"><span class="cp">#ifdef __cplusplus
</span><span class="k">extern</span> <span class="s">"C"</span>
<span class="cp">#endif
</span><span class="kt">int</span> <span class="nf">issetugid</span><span class="p">()</span>
<span class="p">{</span>
<span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
<span class="p">}</span>
</code></pre> CrystaX NDK - Bug #1360: CRYSTAX_PANI: issetugid() not implemented!!! when calling boost::locale::conv::to_utf (10.3.1)https://tracker.crystax.net/issues/1360?journal_id=30882016-04-11T08:04:55ZKarol T.
<ul></ul><p>Thank you for your response, Dmirtry.</p>
<p>I'm glad that you're working on the issue. Unfortunately the workaround you recommended does not seem to work for me. Where should the function be linked to for libcrystax to "see" it?</p>
<p>Thank you for your help.</p>
CrystaX NDK - Bug #1360: CRYSTAX_PANI: issetugid() not implemented!!! when calling boost::locale::conv::to_utf (10.3.1)https://tracker.crystax.net/issues/1360?journal_id=30892016-04-11T14:17:48ZDmitry M.dm@crystax.net
<ul></ul><p>Karol Trojanowski wrote:</p>
<blockquote>
<p>I'm glad that you're working on the issue. Unfortunately the workaround you recommended does not seem to work for me. Where should the function be linked to for libcrystax to "see" it?</p>
</blockquote>
<p>Hmm, maybe I miss something... Could you provide minimal example where this problem is reproduced? This workaround should work generally, but in some cases there might be conditions (such as load order) preventing it. I could say more if you'd share some example where I could reproduce the problem.</p>
CrystaX NDK - Bug #1360: CRYSTAX_PANI: issetugid() not implemented!!! when calling boost::locale::conv::to_utf (10.3.1)https://tracker.crystax.net/issues/1360?journal_id=30902016-04-12T11:08:14ZKarol T.
<ul></ul><p>Dmitry Moskalchuk wrote:</p>
<blockquote>
<p>Hmm, maybe I miss something... Could you provide minimal example where this problem is reproduced? This workaround should work generally, but in some cases there might be conditions (such as load order) preventing it. I could say more if you'd share some example where I could reproduce the problem.</p>
</blockquote>
<p>Here you go:<br>
issetugidtest.cpp</p>
<pre><code class="cpp syntaxhl" data-language="cpp"><span class="cp">#include</span> <span class="cpf"><boost/locale.hpp></span><span class="cp">
#include</span> <span class="cpf"><string></span><span class="cp">
#include</span> <span class="cpf"><iostream></span><span class="cp">
</span><span class="k">extern</span> <span class="s">"C"</span> <span class="kt">int</span> <span class="nf">issetugid</span><span class="p">()</span> <span class="p">{</span> <span class="k">return</span> <span class="mi">0</span><span class="p">;</span> <span class="p">}</span>
<span class="kt">int</span> <span class="nf">main</span><span class="p">()</span>
<span class="p">{</span>
<span class="k">using</span> <span class="n">boost</span><span class="o">::</span><span class="n">locale</span><span class="o">::</span><span class="n">conv</span><span class="o">::</span><span class="n">to_utf</span><span class="p">;</span>
<span class="k">using</span> <span class="k">namespace</span> <span class="n">std</span><span class="p">;</span>
<span class="k">auto</span> <span class="n">data</span> <span class="o">=</span> <span class="n">vector</span><span class="o"><</span><span class="kt">uint8_t</span><span class="o">></span><span class="p">{</span> <span class="mh">0xCA</span><span class="p">,</span> <span class="mh">0xC1</span><span class="p">,</span> <span class="mh">0xCB</span><span class="p">,</span> <span class="mh">0xCF</span><span class="p">,</span> <span class="mh">0xC3</span><span class="p">,</span> <span class="mh">0xC5</span><span class="p">,</span> <span class="mh">0xD1</span><span class="p">,</span> <span class="mh">0xCF</span><span class="p">,</span> <span class="mh">0xD0</span><span class="p">,</span> <span class="mh">0xCF</span><span class="p">,</span> <span class="mh">0xD5</span><span class="p">,</span> <span class="mh">0xCB</span><span class="p">,</span> <span class="mh">0xCF</span><span class="p">,</span> <span class="mh">0xD3</span><span class="p">,</span> <span class="mh">0x00</span> <span class="p">};</span>
<span class="k">auto</span> <span class="n">out_t</span> <span class="o">=</span> <span class="s">u8"ΚΑΛΟΓΕΡΟΠΟΥΛΟΣ"</span><span class="p">;</span>
<span class="n">string</span> <span class="n">text</span><span class="p">;</span>
<span class="n">copy</span><span class="p">(</span><span class="n">begin</span><span class="p">(</span><span class="n">data</span><span class="p">),</span> <span class="n">end</span><span class="p">(</span><span class="n">data</span><span class="p">),</span> <span class="n">back_inserter</span><span class="p">(</span><span class="n">text</span><span class="p">));</span>
<span class="k">auto</span> <span class="n">encoding</span> <span class="o">=</span> <span class="n">string</span><span class="p">(</span><span class="s">"ISO-8859-7"</span><span class="p">);</span>
<span class="k">auto</span> <span class="n">ret</span> <span class="o">=</span> <span class="n">to_utf</span><span class="o"><</span><span class="kt">char</span><span class="o">></span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">encoding</span><span class="p">);</span>
<span class="n">assert</span><span class="p">(</span><span class="n">out_t</span> <span class="o">==</span> <span class="n">ret</span><span class="p">);</span>
<span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
<span class="p">}</span>
</code></pre>
<p>Android.mk</p>
<pre><code>LOCAL_PATH := $(call my-dir)
NDK_TOOLCHAIN_VERSION := 5
include $(CLEAR_VARS)
LOCAL_MODULE := issetugidtest
LOCAL_STATIC_LIBRARIES := boost_system_static boost_locale_static
LOCAL_CPPFLAGS += -std=c++14 -fexceptions -Os
LOCAL_SRC_FILES := issetugidtest.cpp
include $(BUILD_EXECUTABLE)
$(call import-module,boost/1.59.0)
</code></pre>
<p>Application.mk</p>
<pre><code>APP_ABI := armeabi-v7a
APP_PLATFORM := android-16
APP_STL := gnustl_static
</code></pre>
<p>After building:</p>
<pre><code>$ adb push libcrystax.so /data
$ adb push issetugidtest /data
$ adb shell LD_LIBRARY_PATH=/data /data/issetugidtest
CRYSTAX_PANI: issetugid() not implemented!!!
</code></pre> CrystaX NDK - Bug #1360: CRYSTAX_PANI: issetugid() not implemented!!! when calling boost::locale::conv::to_utf (10.3.1)https://tracker.crystax.net/issues/1360?journal_id=30912016-04-12T11:30:24ZDmitry M.dm@crystax.net
<ul></ul><p>Karol Trojanowski wrote:</p>
<blockquote>
<p>Here you go:</p>
</blockquote>
<p>Thank you for example. As far as I see, defining <code>issetugid</code> helped, as I said – just because in your example it doesn't crash with message indicating that <code>issetugid</code> is not implemented. Commenting out own <code>issetugid</code> implementation bring CRYSTAX_PANI message back, so workaround I initially suggested is definitely working, as expected.</p>
<p>However, there is another crash, which happens somewhere inside <code>iconv_open</code>. This is definitely bug in libcrystax, so I'm going to figure out what's wrong there. Thank you for report.</p>
CrystaX NDK - Bug #1360: CRYSTAX_PANI: issetugid() not implemented!!! when calling boost::locale::conv::to_utf (10.3.1)https://tracker.crystax.net/issues/1360?journal_id=30922016-04-12T11:30:53ZDmitry M.dm@crystax.net
<ul><li><strong>Category</strong> changed from <i>boost</i> to <i>libcrystax</i></li><li><strong>Priority</strong> changed from <i>Normal</i> to <i>High</i></li></ul> CrystaX NDK - Bug #1360: CRYSTAX_PANI: issetugid() not implemented!!! when calling boost::locale::conv::to_utf (10.3.1)https://tracker.crystax.net/issues/1360?journal_id=30932016-04-12T11:31:00ZDmitry M.dm@crystax.net
<ul><li><strong>Status</strong> changed from <i>Open</i> to <i>In Progress</i></li></ul> CrystaX NDK - Bug #1360: CRYSTAX_PANI: issetugid() not implemented!!! when calling boost::locale::conv::to_utf (10.3.1)https://tracker.crystax.net/issues/1360?journal_id=31962016-05-05T10:13:49ZDmitry M.dm@crystax.net
<ul></ul><p><a href="https://github.com/crystax/android-platform-ndk/tree/master/tests/device/crystax-issue1360-boost_locale_issetugid" class="external">Here</a> is corresponding test case.</p>
CrystaX NDK - Bug #1360: CRYSTAX_PANI: issetugid() not implemented!!! when calling boost::locale::conv::to_utf (10.3.1)https://tracker.crystax.net/issues/1360?journal_id=32492016-05-20T17:40:42ZDmitry M.dm@crystax.net
<ul><li><strong>Status</strong> changed from <i>In Progress</i> to <i>Closed</i></li><li><strong>% Done</strong> changed from <i>0</i> to <i>100</i></li></ul><p>Crash on call of <code>issetugid</code> fixed in master branch. Crash on call of <code>iconv_open</code> is fixed too; however, <code>iconv_open</code> now always return error since it need to have conversion database for work, which is not present on Android. This is separate task though, so I've created new ticket #1398 for it.</p>
<p>Closing this ticket since example code doesn't crash anymore. Instead, it throws C++ exception which outer code can catch and handle. Results of this fix will appear in build #854 at <a href="https://dl.crystax.net/builds/">https://dl.crystax.net/builds/</a>.</p>