[ 
https://issues.apache.org/jira/browse/HADOOP-12955?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15209299#comment-15209299
 ] 

Colin Patrick McCabe commented on HADOOP-12955:
-----------------------------------------------

Thanks, [~drankye].  I agree that building using {{\-Drequire.isal}} is 
important, and I hope we can get YETUS-222 in soon.

{code}
124 void get_library_name(char* buf, size_t buf_len) {
125 #ifdef UNIX 
126   Dl_info dl_info;
127
128   if (isaLoader == NULL || isaLoader->ec_encode_data == NULL) {
129     strncpy(buf, HADOOP_ISAL_LIBRARY, buf_len);
130   }
131
132   if(dladdr(isaLoader->ec_encode_data, &dl_info)) {
133     strncpy(buf, dl_info.dli_fname, buf_len);
134   }
135 #else
136   LPTSTR filename = NULL;
137
138   if (isaLoader == NULL || isaLoader->libec == NULL) {
139     strncpy(buf, HADOOP_ISAL_LIBRARY, buf_len);
140   }
141
142   if (GetModuleFileName(isaLoader->libec, filename, 256) > 0) {
143     strncpy(buf, filename, buf_len);
144   }
145 #endif
{code}

Right now, {{buf}} is left uninitialized if neither if statement is taken in 
the non-UNIX code path.  This case should be an error instead.

Please do not use {{strncpy}}.  It zeroes the entire end of the buffer, which 
is unnecessary in this case.  It also can produce a buffer which is not 
null-terminated if {{src}} is longer than {{dst}}.  Instead, use 
{{snprintf(buf, buf_len, "%s", source);}}.

You need to check if the string you're trying to copy is too long, and return 
an error if that is so.  Please do not silently truncate the name string.

Why is there no return statement on line 140?  Is there ever a case where we 
would want to overwrite the string we wrote on line 139 later in the function?

The potential error coming from {{loadLib}} is not handled.

> checknative failed when checking ISA-L library
> ----------------------------------------------
>
>                 Key: HADOOP-12955
>                 URL: https://issues.apache.org/jira/browse/HADOOP-12955
>             Project: Hadoop Common
>          Issue Type: Bug
>          Components: native
>            Reporter: Kai Zheng
>            Assignee: Kai Zheng
>         Attachments: HADOOP-12955-v1.patch
>
>
> Ref. the comment 
> [here|https://issues.apache.org/jira/browse/HADOOP-11540?focusedCommentId=15207619&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-15207619].
>  
> When run hadoop checknative, it also failed. Got something like below from 
> log:
> {noformat}
> Stack: [0x00007f2b9d405000,0x00007f2b9d506000],  sp=0x00007f2b9d504748,  free 
> space=1021k
> Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native 
> code)
> V  [libjvm.so+0xa90c90]  UTF8::unicode_length(char const*)+0x0
> V  [libjvm.so+0x6ddfc3]  jni_NewStringUTF+0xc3
> j  
> org.apache.hadoop.io.erasurecode.ErasureCodeNative.getLibraryName()Ljava/lang/String;+0
> j  org.apache.hadoop.util.NativeLibraryChecker.main([Ljava/lang/String;)V+212
> v  ~StubRoutines::call_stub
> V  [libjvm.so+0x68c616]  JavaCalls::call_helper(JavaValue*, methodHandle*, 
> JavaCallArguments*, Thread*)+0x1056
> V  [libjvm.so+0x6cdc32]  jni_invoke_static(JNIEnv_*, JavaValue*, _jobject*, 
> JNICallType, _jmethodID*, JNI_ArgumentPusher*, Thread*)+0x362
> V  [libjvm.so+0x6ea63a]  jni_CallStaticVoidMethod+0x17a
> C  [libjli.so+0x7bcc]  JavaMain+0x80c
> C  [libpthread.so.0+0x8182]  start_thread+0xc2
> Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
> j  
> org.apache.hadoop.io.erasurecode.ErasureCodeNative.getLibraryName()Ljava/lang/String;+0
> j  org.apache.hadoop.util.NativeLibraryChecker.main([Ljava/lang/String;)V+212
> v  ~StubRoutines::call_stub
> {noformat}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to