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

FuzzingTeam edited comment on HADOOP-18490 at 10/11/22 12:07 PM:
-----------------------------------------------------------------

The NullPointerException originates in the method *doDecode* when the code 
tries to access the erased locations ({*}erasedIndexes[1]{*}, 
{*}erasedIndexes[2]{*}, etc.) or the locations marked null.

 

*Code snippet-1 of where the buggy condition is present:*
{code:java}
int erasedIdx = decodingState.erasedIndexes[0];

// Process the inputs.
int iIdx, oIdx;
for (int i = 0; i < decodingState.inputs.length; i++) {
  // Skip the erased location.
  if (i == erasedIdx) {
    continue;
  }

  for (iIdx = decodingState.inputs[i].position(), oIdx = output.position();
       iIdx < decodingState.inputs[i].limit();
       iIdx++, oIdx++) {
    output.put(oIdx, (byte) (output.get(oIdx) ^
        decodingState.inputs[i].get(iIdx)));
  }
} {code}
*Code snippet-2 of where the buggy condition is present:*
{code:java}
int erasedIdx = decodingState.erasedIndexes[0];

// Process the inputs.
int iIdx, oIdx;
for (int i = 0; i < decodingState.inputs.length; i++) {
  // Skip the erased location.
  if (i == erasedIdx) {
    continue;
  }

  for (iIdx = decodingState.inputOffsets[i],
           oIdx = decodingState.outputOffsets[0];
       iIdx < decodingState.inputOffsets[i] + dataLen; iIdx++, oIdx++) {
    output[oIdx] ^= decodingState.inputs[i][iIdx];
  }
} {code}
 

*Solution:-*

We propose to update the current condition of the *erasedIdx* to check for all 
erased location/s and to add an additional condition for null values in the 
array ({*}inputs{*}).

We also propose to update the comment above the *erasedIdx* condition, which 
explains the buggy code.


was (Author: JIRAUSER296392):
The NullPointerException originates in the method *doDecode* when the code 
tries to access the erased locations ({*}erasedIndexes[1]{*}, 
{*}erasedIndexes[2]{*}, etc.) or the locations marked null.

 

*Code snippet-1 of where the buggy condition is present:*
{code:java}
int erasedIdx = decodingState.erasedIndexes[0];

// Process the inputs.
int iIdx, oIdx;
for (int i = 0; i < decodingState.inputs.length; i++) {
  // Skip the erased location.
  if (i == erasedIdx) {
    continue;
  }

  for (iIdx = decodingState.inputs[i].position(), oIdx = output.position();
       iIdx < decodingState.inputs[i].limit();
       iIdx++, oIdx++) {
    output.put(oIdx, (byte) (output.get(oIdx) ^
        decodingState.inputs[i].get(iIdx)));
  }
} {code}
{*}Code snippet-2 of where the buggy condition is present:{*}{*}{*}
{code:java}
int erasedIdx = decodingState.erasedIndexes[0];

// Process the inputs.
int iIdx, oIdx;
for (int i = 0; i < decodingState.inputs.length; i++) {
  // Skip the erased location.
  if (i == erasedIdx) {
    continue;
  }

  for (iIdx = decodingState.inputOffsets[i],
           oIdx = decodingState.outputOffsets[0];
       iIdx < decodingState.inputOffsets[i] + dataLen; iIdx++, oIdx++) {
    output[oIdx] ^= decodingState.inputs[i][iIdx];
  }
} {code}
 

*Solution:-*

We propose to update the current condition of the *erasedIdx* to check for all 
erased location/s and to add an additional condition for null values in the 
array ({*}inputs{*}).{*}{*}

We also propose to update the comment above the *erasedIdx* condition, which 
explains the buggy code.

> The check logic for erasedIndexes in XORRawDecoder is buggy
> -----------------------------------------------------------
>
>                 Key: HADOOP-18490
>                 URL: https://issues.apache.org/jira/browse/HADOOP-18490
>             Project: Hadoop Common
>          Issue Type: Bug
>    Affects Versions: 3.3.4
>            Reporter: FuzzingTeam
>            Priority: Major
>              Labels: pull-request-available
>
> In the method _doDecode_ of class {_}XORRawDecoder{_}, the code does not 
> handle all the erased and null marked locations in the array ({_}inputs{_}) 
> but only skips the first erased location ({_}erasedIndexes[0]{_}). The 
> missing handling results in an unhandled NullPointerException.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to