diff options
Diffstat (limited to 'src/rational_int.c')
-rw-r--r-- | src/rational_int.c | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/src/rational_int.c b/src/rational_int.c index 7aab561..f3e5475 100644 --- a/src/rational_int.c +++ b/src/rational_int.c @@ -1,5 +1,5 @@ /* -Copyright 2015 Ian Jauslin +Copyright 2015-2022 Ian Jauslin Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -25,6 +25,7 @@ limitations under the License. #include <mpfr.h> #include "istring.h" #include "array.h" +#include "parse_file.h" Q quot(long int p, long int q){ Q ret; @@ -171,13 +172,18 @@ int str_to_Q(char* str, Q* num){ int mode; char* buffer=calloc(str_len(str)+1,sizeof(char)); char* buffer_ptr=buffer; + int ret; *num=quot(0,1); mode=PP_NUMERATOR_MODE; for(ptr=str;*ptr!='\0';ptr++){ if(*ptr=='/'){ - sscanf(buffer,"%ld",&((*num).numerator)); + ret=read_long_int(buffer,&((*num).numerator)); + if(ret<0){ + fprintf(stderr,"syntax error: numerator should be an integer, got '%s' in '%s'\n",buffer,str); + exit(-1); + } buffer_ptr=buffer; *buffer_ptr='\0'; mode=PP_DENOMINATOR_MODE; @@ -189,10 +195,18 @@ int str_to_Q(char* str, Q* num){ // last step if(mode==PP_NUMERATOR_MODE){ - sscanf(buffer,"%ld",&((*num).numerator)); + ret=read_long_int(buffer,&((*num).numerator)); + if(ret<0){ + fprintf(stderr,"syntax error: numerator should be an integer, got '%s' in '%s'\n",buffer,str); + exit(-1); + } } else if(mode==PP_DENOMINATOR_MODE){ - sscanf(buffer,"%ld",&((*num).denominator)); + ret=read_long_int(buffer,&((*num).denominator)); + if(ret<0){ + fprintf(stderr,"syntax error: numerator should be an integer, got '%s' in '%s'\n",buffer,str); + exit(-1); + } } free(buffer); |