Treat textlist item number as int instead of short
cf. https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=838952
This commit is contained in:
		| @@ -119,7 +119,8 @@ unshiftHist(Hist *hist, char *ptr) | |||||||
| { | { | ||||||
|     HistItem *item; |     HistItem *item; | ||||||
|  |  | ||||||
|     if (hist == NULL || hist->list == NULL) |     if (hist == NULL || hist->list == NULL || | ||||||
|  | 	hist->list->nitem >= HIST_LIST_MAX) | ||||||
| 	return NULL; | 	return NULL; | ||||||
|     item = (HistItem *)newListItem((void *)allocStr(ptr, -1), |     item = (HistItem *)newListItem((void *)allocStr(ptr, -1), | ||||||
| 				   (ListItem *)hist->list->first, NULL); | 				   (ListItem *)hist->list->first, NULL); | ||||||
| @@ -137,7 +138,8 @@ pushHist(Hist *hist, char *ptr) | |||||||
| { | { | ||||||
|     HistItem *item; |     HistItem *item; | ||||||
|  |  | ||||||
|     if (hist == NULL || hist->list == NULL) |     if (hist == NULL || hist->list == NULL || | ||||||
|  | 	hist->list->nitem >= HIST_LIST_MAX) | ||||||
| 	return NULL; | 	return NULL; | ||||||
|     item = (HistItem *)newListItem((void *)allocStr(ptr, -1), |     item = (HistItem *)newListItem((void *)allocStr(ptr, -1), | ||||||
| 				   NULL, (ListItem *)hist->list->last); | 				   NULL, (ListItem *)hist->list->last); | ||||||
| @@ -157,7 +159,8 @@ pushHashHist(Hist *hist, char *ptr) | |||||||
| { | { | ||||||
|     HistItem *item; |     HistItem *item; | ||||||
|  |  | ||||||
|     if (hist == NULL || hist->list == NULL) |     if (hist == NULL || hist->list == NULL || | ||||||
|  | 	hist->list->nitem >= HIST_LIST_MAX) | ||||||
| 	return NULL; | 	return NULL; | ||||||
|     item = getHashHist(hist, ptr); |     item = getHashHist(hist, ptr); | ||||||
|     if (item) { |     if (item) { | ||||||
|   | |||||||
| @@ -5,6 +5,7 @@ | |||||||
| #include "textlist.h" | #include "textlist.h" | ||||||
| #include "hash.h" | #include "hash.h" | ||||||
|  |  | ||||||
|  | #define HIST_LIST_MAX GENERAL_LIST_MAX | ||||||
| #define HIST_HASH_SIZE 127 | #define HIST_HASH_SIZE 127 | ||||||
|  |  | ||||||
| typedef ListItem HistItem; | typedef ListItem HistItem; | ||||||
|   | |||||||
| @@ -30,7 +30,7 @@ void | |||||||
| pushValue(GeneralList *tl, void *s) | pushValue(GeneralList *tl, void *s) | ||||||
| { | { | ||||||
|     ListItem *it; |     ListItem *it; | ||||||
|     if (s == NULL) |     if (s == NULL || tl == NULL || tl->nitem >= GENERAL_LIST_MAX) | ||||||
| 	return; | 	return; | ||||||
|     it = newListItem(s, NULL, tl->last); |     it = newListItem(s, NULL, tl->last); | ||||||
|     if (tl->first == NULL) { |     if (tl->first == NULL) { | ||||||
| @@ -99,6 +99,9 @@ appendGeneralList(GeneralList *tl, GeneralList *tl2) | |||||||
|     if (tl && tl2) { |     if (tl && tl2) { | ||||||
| 	if (tl2->first) { | 	if (tl2->first) { | ||||||
| 	    if (tl->last) { | 	    if (tl->last) { | ||||||
|  | 		if (tl->nitem + tl2->nitem > GENERAL_LIST_MAX) { | ||||||
|  | 		    return tl; | ||||||
|  | 		} | ||||||
| 		tl->last->next = tl2->first; | 		tl->last->next = tl2->first; | ||||||
| 		tl2->first->prev = tl->last; | 		tl2->first->prev = tl->last; | ||||||
| 		tl->last = tl2->last; | 		tl->last = tl2->last; | ||||||
|   | |||||||
							
								
								
									
										10
									
								
								textlist.h
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								textlist.h
									
									
									
									
									
								
							| @@ -2,6 +2,8 @@ | |||||||
| #ifndef TEXTLIST_H | #ifndef TEXTLIST_H | ||||||
| #define TEXTLIST_H | #define TEXTLIST_H | ||||||
| #include "Str.h" | #include "Str.h" | ||||||
|  | #include <limits.h> | ||||||
|  | #define GENERAL_LIST_MAX (INT_MAX / 32) | ||||||
|  |  | ||||||
| /* General doubly linked list */ | /* General doubly linked list */ | ||||||
|  |  | ||||||
| @@ -14,7 +16,7 @@ typedef struct _listitem { | |||||||
| typedef struct _generallist { | typedef struct _generallist { | ||||||
|     ListItem *first; |     ListItem *first; | ||||||
|     ListItem *last; |     ListItem *last; | ||||||
|     short nitem; |     int nitem; | ||||||
| } GeneralList; | } GeneralList; | ||||||
|  |  | ||||||
| extern ListItem *newListItem(void *s, ListItem *n, ListItem *p); | extern ListItem *newListItem(void *s, ListItem *n, ListItem *p); | ||||||
| @@ -36,7 +38,7 @@ typedef struct _textlistitem { | |||||||
| typedef struct _textlist { | typedef struct _textlist { | ||||||
|     TextListItem *first; |     TextListItem *first; | ||||||
|     TextListItem *last; |     TextListItem *last; | ||||||
|     short nitem; |     int nitem; | ||||||
| } TextList; | } TextList; | ||||||
|  |  | ||||||
| #define newTextList() ((TextList *)newGeneralList()) | #define newTextList() ((TextList *)newGeneralList()) | ||||||
| @@ -50,7 +52,7 @@ typedef struct _textlist { | |||||||
|  |  | ||||||
| typedef struct _TextLine { | typedef struct _TextLine { | ||||||
|     Str line; |     Str line; | ||||||
|     short pos; |     int pos; | ||||||
| } TextLine; | } TextLine; | ||||||
|  |  | ||||||
| typedef struct _textlinelistitem { | typedef struct _textlinelistitem { | ||||||
| @@ -62,7 +64,7 @@ typedef struct _textlinelistitem { | |||||||
| typedef struct _textlinelist { | typedef struct _textlinelist { | ||||||
|     TextLineListItem *first; |     TextLineListItem *first; | ||||||
|     TextLineListItem *last; |     TextLineListItem *last; | ||||||
|     short nitem; |     int nitem; | ||||||
| } TextLineList; | } TextLineList; | ||||||
|  |  | ||||||
| extern TextLine *newTextLine(Str line, int pos); | extern TextLine *newTextLine(Str line, int pos); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user