You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@trafodion.apache.org by "ASF GitHub Bot (JIRA)" <ji...@apache.org> on 2017/02/23 06:45:44 UTC

[jira] [Commented] (TRAFODION-2495) HDFS connection issue during LOB creation

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

ASF GitHub Bot commented on TRAFODION-2495:
-------------------------------------------

GitHub user sandhyasun opened a pull request:

    https://github.com/apache/incubator-trafodion/pull/977

    Fix for a potential stack memory corruption.{TRAFODION-2495]

    The lobHdfsServer was being overwritten by some code right below the line that read the default value and caused problems trying to make an HDFS connection.

You can merge this pull request into a Git repository by running:

    $ git pull https://github.com/sandhyasun/incubator-trafodion 2.2_work

Alternatively you can review and apply these changes as the patch at:

    https://github.com/apache/incubator-trafodion/pull/977.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

    This closes #977
    
----

----


> HDFS connection issue during LOB creation
> -----------------------------------------
>
>                 Key: TRAFODION-2495
>                 URL: https://issues.apache.org/jira/browse/TRAFODION-2495
>             Project: Apache Trafodion
>          Issue Type: Bug
>          Components: sql-exe
>    Affects Versions: any
>            Reporter: Sandhya Sundaresan
>            Assignee: Sandhya Sundaresan
>             Fix For: 2.2-incubating
>
>
> In some cases a memory overwrite of the following local variable would cause a bad value for hdfsServer to be passed into the LOB interface causing an Hdfs error. This was seen intermittently and not always reproducible. The code clearly did assume that memory it hadn't allocated would nto be reused and that's dangerous. lobHdfsServer needs it's own memory allocated on the stack or a heap. If not the ComString newSchName could potentially overwrite  the memory returned by the call to CmpCommon::getDefaultString(LOB_HDFS_SERVER) before gttting passed to the LOB interface. 
> ----------------------
>   const char *lobHdfsServer = CmpCommon::getDefaultString(LOB_HDFS_SERVER);
>   Int32 lobHdfsPort = (Lng32)CmpCommon::getDefaultNumeric(LOB_HDFS_PORT);
>    
>   if (j > 0)
>     {
>       Int32 rc = sendAllControls(FALSE, FALSE, TRUE);
>       //if the table is a volatile table return an error
>       if (createTableNode->isVolatile())
>         {
>           *CmpCommon::diags()
>             << DgSqlCode(-CAT_LOB_COLUMN_IN_VOLATILE_TABLE)
>             << DgTableName(extTableName);
>           
>           deallocEHI(ehi); 
>           processReturn();
>           return -1; 
>         }
>       Int64 objUID = getObjectUID(&cliInterface,
>                                   catalogNamePart.data(), schemaNamePart.data(), 
>                                   objectNamePart.data(),
>                                   COM_BASE_TABLE_OBJECT_LIT);
>      
>       ComString newSchName = "\"";
>       newSchName += catalogNamePart;
>       newSchName.append("\".\"");
>       newSchName.append(schemaNamePart);
>       newSchName += "\"";
>       NABoolean lobTrace=FALSE;
>       if (getenv("TRACE_LOB_ACTIONS"))
>         lobTrace=TRUE;
>        rc = SQL_EXEC_LOBddlInterface((char*)newSchName.data(),
>                                           newSchName.length(),
>                                           objUID,
>                                           j,
>                                           LOB_CLI_CREATE,
>                                           lobNumList,
>                                           lobTypList,
>                                           lobLocList,
>                                           (char *)lobHdfsServer,
>                                           lobHdfsPort,
>                                           lobMaxSize,
>                                           lobTrace);
>        
>       if (rc < 0)
>         {
>           //sss TBD need to retrive the cli diags here.
>           *CmpCommon::diags() << DgSqlCode(-CAT_CREATE_OBJECT_ERROR)
>                               << DgTableName(extTableName);
>           deallocEHI(ehi); 	   
>           processReturn();
> 	   
>           return -2;
>         }
>     }



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)