Browse Source

HPCC-18115 Submitting archive_date2str.xml for compilation causing esp crashing

ESPContext dereferencing NULL pointer with user object not allocated. This PR
adds a check for NULL before dereferencing

Signed-off-by: Russ Whitehead <william.whitehead@lexisnexis.com>
Russ Whitehead 8 years ago
parent
commit
710704dace
4 changed files with 14 additions and 14 deletions
  1. 5 5
      dali/base/dasess.cpp
  2. 3 3
      dali/base/dasess.hpp
  3. 4 4
      esp/platform/espcontext.cpp
  4. 2 2
      esp/scm/esp.ecm

+ 5 - 5
dali/base/dasess.cpp

@@ -2021,13 +2021,13 @@ public:
         decrypt(buf,passwordenc);
         return buf;
     }
-    const MemoryBuffer &querySessionToken()
+    const MemoryBuffer *querySessionToken()
     {
-        return sessionToken;
+        return &sessionToken;
     }
-    const MemoryBuffer &querySignature()
+    const MemoryBuffer *querySignature()
     {
-        return signature;
+        return &signature;
     }
     virtual void set(const char *name,const char *password)
     {
@@ -2036,7 +2036,7 @@ public:
         encrypt(buf,password);
         passwordenc.set(buf.str());
     }
-    void set(const char *_name, const char *_password, const MemoryBuffer &_sessionToken, const MemoryBuffer &_signature)
+    void set(const char *_name, const char *_password, const MemoryBuffer *_sessionToken, const MemoryBuffer *_signature)
     {
         set(_name, _password);
         sessionToken.clear().append(_sessionToken);

+ 3 - 3
dali/base/dasess.hpp

@@ -75,10 +75,10 @@ interface IUserDescriptor: extends serializable
 {
     virtual StringBuffer &getUserName(StringBuffer &buf)=0;
     virtual StringBuffer &getPassword(StringBuffer &buf)=0;
-    virtual const MemoryBuffer &querySignature()=0;//user's digital signature
-    virtual const MemoryBuffer &querySessionToken()=0;//ESP session token
+    virtual const MemoryBuffer *querySignature()=0;//user's digital signature
+    virtual const MemoryBuffer *querySessionToken()=0;//ESP session token
     virtual void set(const char *name,const char *password)=0;
-    virtual void set(const char *name,const char *password, const MemoryBuffer &_sessionToken, const MemoryBuffer &_signature)=0;
+    virtual void set(const char *name,const char *password, const MemoryBuffer *_sessionToken, const MemoryBuffer *_signature)=0;
     virtual void clear()=0;
     virtual void serializeExtra(MemoryBuffer &tgt)=0;
     virtual void deserializeExtra(MemoryBuffer &src)=0;

+ 4 - 4
esp/platform/espcontext.cpp

@@ -170,18 +170,18 @@ public:
         if (m_user)
             m_user->credentials().setSessionToken(&token);
     }
-    virtual const MemoryBuffer & querySessionToken()
+    virtual const MemoryBuffer * querySessionToken()
     {
-        return m_user->credentials().getSessionToken();
+        return m_user ? &m_user->credentials().getSessionToken() : nullptr;
     }
     virtual void setSignature(const MemoryBuffer & signature)
     {
         if (m_user)
             m_user->credentials().setSignature(&signature);
     }
-    virtual const MemoryBuffer & querySignature()
+    virtual const MemoryBuffer * querySignature()
     {
-        return m_user->credentials().getSignature();
+        return m_user ? &m_user->credentials().getSignature() : nullptr;
     }
     virtual void setRealm(const char* realm)
     {

+ 2 - 2
esp/scm/esp.ecm

@@ -86,9 +86,9 @@ interface IEspContext : extends IInterface
     virtual void setUser(ISecUser * user) = 0;
     virtual ISecUser * queryUser() = 0;
     virtual void setSessionToken(const MemoryBuffer & token) = 0;
-    virtual const MemoryBuffer & querySessionToken() = 0;
+    virtual const MemoryBuffer * querySessionToken() = 0;
     virtual void setSignature(const MemoryBuffer & signature) = 0;
-    virtual const MemoryBuffer & querySignature() = 0;
+    virtual const MemoryBuffer * querySignature() = 0;
     virtual void setResources(ISecResourceList * rlist) = 0;
     virtual ISecResourceList * queryResources() = 0;
     virtual void setSecManger(ISecManager * mgr) = 0;