I hate overflows as much as the next person

This commit is contained in:
XANTRONIX Development 2016-06-06 20:28:19 -05:00
parent fc19701ec4
commit be84cecfeb
5 changed files with 32 additions and 4 deletions

View file

@ -29,7 +29,7 @@ OBJS = send.o recv.o printer.o link.o uart.o
RECV_NAME = recv RECV_NAME = recv
RECV_BIN = $(RECV_NAME).bin RECV_BIN = $(RECV_NAME).bin
RECV_ELF = $(RECV_NAME).elf RECV_ELF = $(RECV_NAME).elf
RECV_OBJS = recv.o link.o uart.o RECV_OBJS = recv.o printer.o link.o uart.o
SEND_NAME = send SEND_NAME = send
SEND_BIN = $(SEND_NAME).bin SEND_BIN = $(SEND_NAME).bin

View file

@ -3,6 +3,24 @@
#include <tabby/avr/link.h> #include <tabby/avr/link.h>
#include <tabby/avr/printer.h> #include <tabby/avr/printer.h>
int tabby_avr_printer_packet_toolarge(uint8_t type, uint16_t size) {
switch (type) {
case TABBY_PRINTER_PACKET_JOB: {
if (size > sizeof(tabby_printer_job)) {
return 1;
}
}
case TABBY_PRINTER_PACKET_DATA: {
if (size > TABBY_PRINTER_PACKET_MAX_SIZE) {
return 1;
}
}
}
return 0;
}
static uint16_t checksum(tabby_printer_packet *header, uint8_t *body) { static uint16_t checksum(tabby_printer_packet *header, uint8_t *body) {
uint16_t sum = 0; uint16_t sum = 0;

View file

@ -2,7 +2,7 @@
#include <avr/interrupt.h> #include <avr/interrupt.h>
#include <avr/sleep.h> #include <avr/sleep.h>
#include <tabby/printer.h> #include <tabby/avr/printer.h>
#include <tabby/avr/uart.h> #include <tabby/avr/uart.h>
#include <tabby/avr/link.h> #include <tabby/avr/link.h>
#include <tabby/avr.h> #include <tabby/avr.h>
@ -66,12 +66,13 @@ ISR(SPI_STC_vect) {
case 5: { case 5: {
header.size |= in << 8; header.size |= in << 8;
i++;
if (header.size > TABBY_PRINTER_PACKET_MAX_SIZE) { if (tabby_avr_printer_packet_toolarge(header.type, header.size)) {
i = 0; i = 0;
} }
i++;
break; break;
} }

View file

@ -115,6 +115,13 @@ int main() {
header.size |= c << 8; header.size |= c << 8;
i++; i++;
if (tabby_avr_printer_packet_toolarge(header.type,
header.size)) {
i = 0;
b = 0;
sheet_offset = 0;
}
break; break;
} }

View file

@ -5,6 +5,8 @@
#include <tabby/printer.h> #include <tabby/printer.h>
int tabby_avr_printer_packet_toolarge(uint8_t type, uint16_t size);
void tabby_avr_printer_send_packet(uint8_t type, void tabby_avr_printer_send_packet(uint8_t type,
uint8_t *body, uint8_t *body,
uint16_t size, uint16_t size,