~ruther/CTU-FEE-B0B35APO-Semestral-project

83e710f3bb2cfc493a323035911bd90cd9d1ba3b — František Boháček 3 years ago c7e077e
fix: movement within border underflow of unsigned integer
M image-viewer/include/direction.h => image-viewer/include/direction.h +1 -1
@@ 10,6 10,6 @@ typedef enum {
  RIGHT,
} direction_t;

void direction_move_xy(direction_t direction, uint16_t *x, uint16_t *y, int16_t amount);
void direction_move_xy(direction_t direction, int32_t *x, int32_t *y, int16_t amount);

#endif // __DIRECTION_H__

M image-viewer/include/image_viewer.h => image-viewer/include/image_viewer.h +1 -0
@@ 11,6 11,7 @@ typedef struct {
  image_t image;
  cursor_t cursor;
  image_region_t region;
  image_region_t image_region;
  image_region_t display_region;
  image_error_t error;


M image-viewer/src/cursor.c => image-viewer/src/cursor.c +1 -1
@@ 22,7 22,7 @@ void cursor_center(cursor_t *cursor, image_region_t region) {
}

bool cursor_move(cursor_t *cursor, image_region_t region, direction_t direction, int16_t amount) {
  uint16_t x = cursor->x, y = cursor->y;
  int32_t x = cursor->x, y = cursor->y;
  direction_move_xy(direction, &x, &y, amount);

  if (x < region.x) {

M image-viewer/src/direction.c => image-viewer/src/direction.c +1 -1
@@ 1,6 1,6 @@
#include "direction.h"

void direction_move_xy(direction_t direction, uint16_t *x, uint16_t *y, int16_t amount) {
void direction_move_xy(direction_t direction, int32_t *x, int32_t *y, int16_t amount) {
  switch (direction) {
  case LEFT:
    *x -= amount;

M image-viewer/src/image.c => image-viewer/src/image.c +2 -2
@@ 36,8 36,8 @@ image_region_t image_region_create(uint16_t x, uint16_t y, uint16_t width,

bool image_region_move_within(image_region_t *to_move, direction_t direction,
                              int amount, image_region_t *border) {
  uint16_t x = to_move->x;
  uint16_t y = to_move->y;
  int32_t x = to_move->x;
  int32_t y = to_move->y;

  if (x < border->x) {
    x = border->x;

M image-viewer/src/image_viewer.c => image-viewer/src/image_viewer.c +3 -1
@@ 19,13 19,15 @@ image_viewer_t image_viewer_create(char *filename, display_t *display, logger_t 
    .region = image_region_create(0, 0, 0, 0),
    .logger = logger,
    .display_region = image_region_create(0, 0, DISPLAY_WIDTH, DISPLAY_HEIGHT),
    .image_region = image_region_create(0, 0, 0, 0),
    .scale_factor = 0
  };

  viewer.error = image_loader_load(&viewer.image);

  if (viewer.error == IMERR_SUCCESS) {
    viewer.region = image_region_create(0, 0, viewer.image.width, viewer.image.height);
    viewer.region = viewer.image_region =
        image_region_create(0, 0, viewer.image.width, viewer.image.height);
    cursor_center(&viewer.cursor, viewer.display_region);
  }


Do not follow this link