|
8 | 8 | *
|
9 | 9 | *
|
10 | 10 | * IDENTIFICATION
|
11 |
| - * $PostgreSQL: pgsql/src/backend/catalog/pg_type.c,v 1.126 2009/06/11 14:48:55 momjian Exp $ |
| 11 | + * $PostgreSQL: pgsql/src/backend/catalog/pg_type.c,v 1.127 2009/08/16 18:14:34 tgl Exp $ |
12 | 12 | *
|
13 | 13 | *-------------------------------------------------------------------------
|
14 | 14 | */
|
@@ -686,23 +686,27 @@ RenameTypeInternal(Oid typeOid, const char *newTypeName, Oid typeNamespace)
|
686 | 686 | char *
|
687 | 687 | makeArrayTypeName(const char *typeName, Oid typeNamespace)
|
688 | 688 | {
|
689 |
| - char *arr; |
690 |
| - int i; |
| 689 | + char *arr = (char *) palloc(NAMEDATALEN); |
| 690 | + int namelen = strlen(typeName); |
691 | 691 | Relation pg_type_desc;
|
| 692 | + int i; |
692 | 693 |
|
693 | 694 | /*
|
694 | 695 | * The idea is to prepend underscores as needed until we make a name that
|
695 | 696 | * doesn't collide with anything...
|
696 | 697 | */
|
697 |
| - arr = palloc(NAMEDATALEN); |
698 |
| - |
699 | 698 | pg_type_desc = heap_open(TypeRelationId, AccessShareLock);
|
700 | 699 |
|
701 | 700 | for (i = 1; i < NAMEDATALEN - 1; i++)
|
702 | 701 | {
|
703 | 702 | arr[i - 1] = '_';
|
704 |
| - strlcpy(arr + i, typeName, NAMEDATALEN - i); |
705 |
| - truncate_identifier(arr, strlen(arr), false); |
| 703 | + if (i + namelen < NAMEDATALEN) |
| 704 | + strcpy(arr + i, typeName); |
| 705 | + else |
| 706 | + { |
| 707 | + memcpy(arr + i, typeName, NAMEDATALEN - i); |
| 708 | + truncate_identifier(arr, NAMEDATALEN, false); |
| 709 | + } |
706 | 710 | if (!SearchSysCacheExists(TYPENAMENSP,
|
707 | 711 | CStringGetDatum(arr),
|
708 | 712 | ObjectIdGetDatum(typeNamespace),
|
|
0 commit comments