devilhorns pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=251c300b8f908f573fbc0606cc4285db2ac724f7

commit 251c300b8f908f573fbc0606cc4285db2ac724f7
Author: Chris Michael <[email protected]>
Date:   Wed Dec 10 13:30:51 2014 -0500

    evas-gl-common: Fix issue with Coverity reporting null dereferences
    
    Summary: This fixes Coverity CID1257606 and CID1257607: Dereferencing
    null return value. _evgl_tls_resource_get Can return NULL so we should
    be checking that returned value before trying to use it
    
    @fix
    
    Signed-off-by: Chris Michael <[email protected]>
---
 src/modules/evas/engines/gl_common/evas_gl_api.c | 82 +++++++++++++-----------
 1 file changed, 44 insertions(+), 38 deletions(-)

diff --git a/src/modules/evas/engines/gl_common/evas_gl_api.c 
b/src/modules/evas/engines/gl_common/evas_gl_api.c
index 2e3f980..6e04c92 100644
--- a/src/modules/evas/engines/gl_common/evas_gl_api.c
+++ b/src/modules/evas/engines/gl_common/evas_gl_api.c
@@ -460,35 +460,38 @@ _evgl_glEnable(GLenum cap)
              EVGL_Resource *rsc = _evgl_tls_resource_get();
              int oc[4] = {0,0,0,0}, nc[4] = {0,0,0,0}, cc[4] = {0,0,0,0};
 
-             if (!ctx->current_fbo)
+             if (rsc)
                {
-                  // Direct rendering to canvas
-                  if (!ctx->scissor_updated)
-                    {
-                       compute_gl_coordinates(rsc->direct.win_w, 
rsc->direct.win_h,
-                                              rsc->direct.rot, 0,
-                                              0, 0, 0, 0,
-                                              rsc->direct.img.x, 
rsc->direct.img.y,
-                                              rsc->direct.img.w, 
rsc->direct.img.h,
-                                              rsc->direct.clip.x, 
rsc->direct.clip.y,
-                                              rsc->direct.clip.w, 
rsc->direct.clip.h,
-                                              oc, nc, cc);
-                       glScissor(cc[0], cc[1], cc[2], cc[3]);
-                    }
-                  else
+                  if (!ctx->current_fbo)
                     {
-                       compute_gl_coordinates(rsc->direct.win_w, 
rsc->direct.win_h,
-                                              rsc->direct.rot, 1,
-                                              ctx->scissor_coord[0], 
ctx->scissor_coord[1],
-                                              ctx->scissor_coord[2], 
ctx->scissor_coord[3],
-                                              rsc->direct.img.x, 
rsc->direct.img.y,
-                                              rsc->direct.img.w, 
rsc->direct.img.h,
-                                              rsc->direct.clip.x, 
rsc->direct.clip.y,
-                                              rsc->direct.clip.w, 
rsc->direct.clip.h,
-                                              oc, nc, cc);
-                       glScissor(nc[0], nc[1], nc[2], nc[3]);
+                       // Direct rendering to canvas
+                       if (!ctx->scissor_updated)
+                         {
+                            compute_gl_coordinates(rsc->direct.win_w, 
rsc->direct.win_h,
+                                                   rsc->direct.rot, 0,
+                                                   0, 0, 0, 0,
+                                                   rsc->direct.img.x, 
rsc->direct.img.y,
+                                                   rsc->direct.img.w, 
rsc->direct.img.h,
+                                                   rsc->direct.clip.x, 
rsc->direct.clip.y,
+                                                   rsc->direct.clip.w, 
rsc->direct.clip.h,
+                                                   oc, nc, cc);
+                            glScissor(cc[0], cc[1], cc[2], cc[3]);
+                         }
+                       else
+                         {
+                            compute_gl_coordinates(rsc->direct.win_w, 
rsc->direct.win_h,
+                                                   rsc->direct.rot, 1,
+                                                   ctx->scissor_coord[0], 
ctx->scissor_coord[1],
+                                                   ctx->scissor_coord[2], 
ctx->scissor_coord[3],
+                                                   rsc->direct.img.x, 
rsc->direct.img.y,
+                                                   rsc->direct.img.w, 
rsc->direct.img.h,
+                                                   rsc->direct.clip.x, 
rsc->direct.clip.y,
+                                                   rsc->direct.clip.w, 
rsc->direct.clip.h,
+                                                   oc, nc, cc);
+                            glScissor(nc[0], nc[1], nc[2], nc[3]);
+                         }
+                       ctx->direct_scissor = 1;
                     }
-                  ctx->direct_scissor = 1;
                }
              else
                {
@@ -533,20 +536,23 @@ _evgl_glDisable(GLenum cap)
                   int oc[4] = {0,0,0,0}, nc[4] = {0,0,0,0}, cc[4] = {0,0,0,0};
                   EVGL_Resource *rsc = _evgl_tls_resource_get();
 
-                  compute_gl_coordinates(rsc->direct.win_w, rsc->direct.win_h,
-                                         rsc->direct.rot, 1,
-                                         0, 0, rsc->direct.img.w, 
rsc->direct.img.h,
-                                         rsc->direct.img.x, rsc->direct.img.y,
-                                         rsc->direct.img.w, rsc->direct.img.h,
-                                         rsc->direct.clip.x, 
rsc->direct.clip.y,
-                                         rsc->direct.clip.w, 
rsc->direct.clip.h,
-                                         oc, nc, cc);
+                  if (rsc)
+                    {
+                       compute_gl_coordinates(rsc->direct.win_w, 
rsc->direct.win_h,
+                                              rsc->direct.rot, 1,
+                                              0, 0, rsc->direct.img.w, 
rsc->direct.img.h,
+                                              rsc->direct.img.x, 
rsc->direct.img.y,
+                                              rsc->direct.img.w, 
rsc->direct.img.h,
+                                              rsc->direct.clip.x, 
rsc->direct.clip.y,
+                                              rsc->direct.clip.w, 
rsc->direct.clip.h,
+                                              oc, nc, cc);
 
-                  RECTS_CLIP_TO_RECT(nc[0], nc[1], nc[2], nc[3], cc[0], cc[1], 
cc[2], cc[3]);
-                  glScissor(nc[0], nc[1], nc[2], nc[3]);
+                       RECTS_CLIP_TO_RECT(nc[0], nc[1], nc[2], nc[3], cc[0], 
cc[1], cc[2], cc[3]);
+                       glScissor(nc[0], nc[1], nc[2], nc[3]);
 
-                  ctx->direct_scissor = 1;
-                  glEnable(GL_SCISSOR_TEST);
+                       ctx->direct_scissor = 1;
+                       glEnable(GL_SCISSOR_TEST);
+                    }
                }
              else
                {

-- 


Reply via email to