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

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

Github user sandhyasun commented on a diff in the pull request:

    https://github.com/apache/incubator-trafodion/pull/977#discussion_r102879048
  
    --- Diff: core/sql/sqlcomp/CmpSeabaseDDLtable.cpp ---
    @@ -4275,7 +4275,10 @@ short CmpSeabaseDDL::dropSeabaseTable2(
       short *lobNumList = new (STMTHEAP) short[numCols];
       short *lobTypList = new (STMTHEAP) short[numCols];
       char  **lobLocList = new (STMTHEAP) char*[numCols];
    -  const char *lobHdfsServer = CmpCommon::getDefaultString(LOB_HDFS_SERVER);
    +
    +  char  lobHdfsServer[256] ; // max length determined by 
dfs.namenode.fs-limits.max-component-length(255)
    +  memset(lobHdfsServer,0,256);
    +  
strncpy(lobHdfsServer,CmpCommon::getDefaultString(LOB_HDFS_SERVER),sizeof(lobHdfsServer));
    --- End diff --
    
    Will do. 


> 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)

Reply via email to