1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186
|
Description: run autopkgstest on arm64
This patch explicitly sets some generic "char" to "signed char". By default,
"char" are "signed" on common architectures such as amd64, but on arm64,
"char" are "unsigned". This leads to underflow issues, manifesting themselves
as either segmentation faults, or infinite loops.
Author: Étienne Mollier <etienne.mollier@mailoo.org>
Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=970462
Forwarded: no
Last-Update: 2020-09-20
---
This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
--- sweed.orig/SweeD_Input.c
+++ sweed/SweeD_Input.c
@@ -786,13 +786,13 @@
}
-void ignoreLineSpaces(FILE *fp, char *ent)
+void ignoreLineSpaces(FILE *fp, signed char *ent)
{
while(*ent==' '|| *ent == 9) // horizontal tab
*ent = fgetc(fp);
}
-int isEndOfLine2(char ent)
+int isEndOfLine2(signed char ent)
{
if(ent == 10 || ent == 13)
return 1;
@@ -805,7 +805,7 @@
*readEOL = *readEOF = 0;
- char ent = fgetc(fp);
+ signed char ent = fgetc(fp);
int i=0;
@@ -853,7 +853,7 @@
int findFirstAlignment(FILE *fp, int format)
{
- char tmp ;
+ signed char tmp ;
int temp=-1;
if(format==FASTA_FORMAT)
@@ -1025,7 +1025,7 @@
int findNextAlignment(FILE *fp, int fileFormat)
{
- char stop,tmp;
+ signed char stop,tmp;
int temp=-1;
if (fileFormat == MS_FORMAT || fileFormat == SF_FORMAT)
@@ -1390,7 +1390,7 @@
return 0;
}
-void ignoreSpaces(FILE * fp, char * ent)
+void ignoreSpaces(FILE * fp, signed char * ent)
{
while(*ent != EOF && (*ent==10 || *ent==13 || *ent==32 || *ent==9) )
*ent = fgetc(fp);
@@ -1576,7 +1576,7 @@
void goToLineEnd(FILE *fp)
{
- char ent;
+ signed char ent;
while( (ent = fgetc(fp) ) != EOF )
{
@@ -1713,7 +1713,7 @@
}
-void updateStateCounters (alignment_struct * alignment, char ent, int index)
+void updateStateCounters (alignment_struct * alignment, signed char ent, int index)
{
if(ent==AD)
{
@@ -1743,7 +1743,7 @@
int readFASTAsequenceLight(FILE * fp, alignment_struct * alignment, char * seqName, int outgroup)
{
int DIM = 10, i=0, y=0;
- char ent;
+ signed char ent;
if(alignment->segsites==-1)
{
@@ -2197,7 +2197,7 @@
fprintf(fp,"\n");
}
-int isEndOfLine(char ent)
+int isEndOfLine(signed char ent)
{
if(ent == 10|| ent == 13 || ent == 32)
return 1;
@@ -2207,7 +2207,7 @@
-int isSpace(char ent)
+int isSpace(signed char ent)
{
if(ent == 9 || ent == 32)
return 1;
@@ -2217,7 +2217,7 @@
-void ignoreAll(FILE * fp, char * ent)
+void ignoreAll(FILE * fp, signed char * ent)
{
while(*ent < 33 && *ent != EOF)
*ent = fgetc(fp);
@@ -2225,7 +2225,7 @@
int skipLine (FILE * fp)
{
- char tmp;
+ signed char tmp;
while( (tmp = fgetc(fp) ) != EOF)
if(tmp == '\n')
@@ -2829,6 +2829,7 @@
if(elementIndex == VCF_HLENGTH-1 || eol==1 || eof==1 || lineSkipped==1)
break;
+
}
if (eof== 1 || position == -1)
@@ -3177,7 +3177,7 @@
void readAlignmentMACS(FILE *fp, alignment_struct *alignment, FILE *fpInfo, FILE *fpSFo)
{
int i, DIM = 2, prevDIM;
- char ent;
+ signed char ent;
int nsnp = 0;
int sitevar;
char siteflag[100];
@@ -3336,7 +3336,7 @@
void readAlignmentMS(FILE *fp, alignment_struct *alignment, FILE * fpInfo, FILE *fpSFo)
{
- char ent;
+ signed char ent;
int i, temp = fscanf(fp,"%*s %d %*s", &alignment->segsites);
@@ -3442,7 +3442,7 @@
int i = 0, DIM=1, x = 0, n = 0, folded = 0;
double position = 0.;
char tmpString[100];
- char ent;
+ signed char ent;
alignment->x = calloc(DIM, sizeof(al_t));
assert(alignment->x != NULL);
--- sweed.orig/SweeD.h
+++ sweed/SweeD.h
@@ -319,7 +319,7 @@
void printCharArray(char *array, int n);
-int isEndOfLine(char ent);
+int isEndOfLine(signed char ent);
void goToLineEnd(FILE *fp);
@@ -343,9 +343,9 @@
void parseIndividual(char *word, char** genotype, char delimiter, int token, char* states, char phased, char unphased, int *ploidy, int *max_ploidy);
-void ignoreAll(FILE * fp, char * ent);
+void ignoreAll(FILE * fp, signed char * ent);
-int isSpace(char ent);
+int isSpace(signed char ent);
double XchooseY_ln(int x, int y);
|