mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-03 09:13:20 +03:00 
			
		
		
		
	plpgsql_dstring_append was broken for long strings.
This commit is contained in:
		@@ -3,7 +3,7 @@
 | 
				
			|||||||
 *			  procedural language
 | 
					 *			  procedural language
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * IDENTIFICATION
 | 
					 * IDENTIFICATION
 | 
				
			||||||
 *	  $Header: /cvsroot/pgsql/src/pl/plpgsql/src/pl_funcs.c,v 1.17 2001/11/15 23:31:09 tgl Exp $
 | 
					 *	  $Header: /cvsroot/pgsql/src/pl/plpgsql/src/pl_funcs.c,v 1.18 2002/05/05 17:38:26 tgl Exp $
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 *	  This software is copyrighted by Jan Wieck - Hamburg.
 | 
					 *	  This software is copyrighted by Jan Wieck - Hamburg.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
@@ -64,6 +64,7 @@ plpgsql_dstring_init(PLpgSQL_dstring * ds)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	ds->value = palloc(ds->alloc = 512);
 | 
						ds->value = palloc(ds->alloc = 512);
 | 
				
			||||||
	ds->used = 0;
 | 
						ds->used = 0;
 | 
				
			||||||
 | 
						ds->value[0] = '\0';
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -86,10 +87,14 @@ void
 | 
				
			|||||||
plpgsql_dstring_append(PLpgSQL_dstring * ds, char *str)
 | 
					plpgsql_dstring_append(PLpgSQL_dstring * ds, char *str)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	int			len = strlen(str);
 | 
						int			len = strlen(str);
 | 
				
			||||||
 | 
						int			needed = ds->used + len + 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (ds->used + len + 1 > ds->alloc)
 | 
						if (needed > ds->alloc)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
 | 
							/* might have to double more than once, if len is large */
 | 
				
			||||||
 | 
							do {
 | 
				
			||||||
			ds->alloc *= 2;
 | 
								ds->alloc *= 2;
 | 
				
			||||||
 | 
							} while (needed > ds->alloc);
 | 
				
			||||||
		ds->value = repalloc(ds->value, ds->alloc);
 | 
							ds->value = repalloc(ds->value, ds->alloc);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user