fix possible segfault and negative height

This commit is contained in:
Jacek Jendrzej
2016-10-31 15:53:29 +01:00
parent 5804ed2d3a
commit b8849d53b5
4 changed files with 16 additions and 1 deletions

View File

@@ -62,6 +62,9 @@ uint8_t CColorGradient::limitChar(int c)
fb_pixel_t* CColorGradient::gradientColorToTransparent(fb_pixel_t col, fb_pixel_t *gradientBuf, int bSize, int /*mode*/, int /*intensity*/) fb_pixel_t* CColorGradient::gradientColorToTransparent(fb_pixel_t col, fb_pixel_t *gradientBuf, int bSize, int /*mode*/, int /*intensity*/)
{ {
if (bSize < 1)
return gradientBuf;
if (gradientBuf == NULL) { if (gradientBuf == NULL) {
gradientBuf = (fb_pixel_t*) malloc(bSize * sizeof(fb_pixel_t)); gradientBuf = (fb_pixel_t*) malloc(bSize * sizeof(fb_pixel_t));
if (gradientBuf == NULL) { if (gradientBuf == NULL) {
@@ -94,6 +97,8 @@ fb_pixel_t* CColorGradient::gradientColorToTransparent(fb_pixel_t col, fb_pixel_
fb_pixel_t* CColorGradient::gradientOneColor(fb_pixel_t col, fb_pixel_t *gradientBuf, int bSize, int mode, int intensity, uint8_t v_min, uint8_t v_max, uint8_t s) fb_pixel_t* CColorGradient::gradientOneColor(fb_pixel_t col, fb_pixel_t *gradientBuf, int bSize, int mode, int intensity, uint8_t v_min, uint8_t v_max, uint8_t s)
{ {
if (bSize < 1)
return gradientBuf;
if (gradientBuf == NULL) { if (gradientBuf == NULL) {
gradientBuf = (fb_pixel_t*) malloc(bSize * sizeof(fb_pixel_t)); gradientBuf = (fb_pixel_t*) malloc(bSize * sizeof(fb_pixel_t));

View File

@@ -676,7 +676,7 @@ fb_pixel_t* CFrameBuffer::paintBoxRel2Buf(const int dx, const int dy, const int
{ {
if (!getActive()) if (!getActive())
return buf; return buf;
if (dx == 0 || dy == 0) { if (dx < 1 || dy < 1) {
dprintf(DEBUG_INFO, "[CFrameBuffer] [%s - %d]: radius %d, dx %d dy %d\n", __func__, __LINE__, radius, dx, dy); dprintf(DEBUG_INFO, "[CFrameBuffer] [%s - %d]: radius %d, dx %d dy %d\n", __func__, __LINE__, radius, dx, dy);
return buf; return buf;
} }
@@ -2026,6 +2026,9 @@ void CFrameBuffer::blit2FB(void *fbbuff, uint32_t width, uint32_t height, uint32
void CFrameBuffer::blitBox2FB(const fb_pixel_t* boxBuf, uint32_t width, uint32_t height, uint32_t xoff, uint32_t yoff) void CFrameBuffer::blitBox2FB(const fb_pixel_t* boxBuf, uint32_t width, uint32_t height, uint32_t xoff, uint32_t yoff)
{ {
if(width <1 || height <1 || !boxBuf )
return;
uint32_t xc = (width > xRes) ? (uint32_t)xRes : width; uint32_t xc = (width > xRes) ? (uint32_t)xRes : width;
uint32_t yc = (height > yRes) ? (uint32_t)yRes : height; uint32_t yc = (height > yRes) ? (uint32_t)yRes : height;

View File

@@ -136,6 +136,8 @@ void CComponentsScrollBar::initSegments()
//calculate height of segment container //calculate height of segment container
int h_seg_obj = height - 2*sb_up_obj->getHeight() - 3*append_y_offset; int h_seg_obj = height - 2*sb_up_obj->getHeight() - 3*append_y_offset;
if(h_seg_obj < 0)
h_seg_obj = 0;
//init segment container //init segment container
if (sb_segments_obj == NULL){ if (sb_segments_obj == NULL){
@@ -154,6 +156,8 @@ void CComponentsScrollBar::initSegments()
//set y position of 1st segment and set height of segments //set y position of 1st segment and set height of segments
int y_seg = 1+ append_y_offset; int y_seg = 1+ append_y_offset;
int h_seg = sb_segments_obj->getHeight()/sb_segments_count - append_y_offset; int h_seg = sb_segments_obj->getHeight()/sb_segments_count - append_y_offset;
if(h_seg < 0)
h_seg = 0;
//create and add segments to segment container //create and add segments to segment container
for(u_int8_t i=0; i<sb_segments_count; i++){ for(u_int8_t i=0; i<sb_segments_count; i++){

View File

@@ -445,6 +445,9 @@ void CInfoViewer::paintHead()
void CInfoViewer::paintBody() void CInfoViewer::paintBody()
{ {
int h_body = InfoHeightY - header_height - OFFSET_SHADOW; int h_body = InfoHeightY - header_height - OFFSET_SHADOW;
if(h_body < 0)
h_body = 0;
infoViewerBB->initBBOffset(); infoViewerBB->initBBOffset();
if (!zap_mode) if (!zap_mode)
h_body += infoViewerBB->bottom_bar_offset; h_body += infoViewerBB->bottom_bar_offset;