535457b618d5a08927870d96f16fa900cc4a91ab braney Wed Aug 19 18:08:44 2026 -0700 gtexTracks: match the guard on the description abbreviation to the bytes it writes, no redmine diff --git src/hg/hgTracks/gtexTracks.c src/hg/hgTracks/gtexTracks.c index 4acd36797e7..a0dd2a0c30e 100644 --- src/hg/hgTracks/gtexTracks.c +++ src/hg/hgTracks/gtexTracks.c @@ -494,31 +494,32 @@ geneInfo->geneModel = hashFindVal(modelHash, geneBed->geneId); // sometimes this is missing, hash returns NULL. do we check? // NOTE: Consider loading all gene descriptions to save queries char query[256]; sqlSafef(query, sizeof(query), "select kgXref.description from kgXref where geneSymbol='%s'", geneBed->name); char *knownDatabase = hdbDefaultKnownDb(database); struct sqlConnection *conn = hAllocConn(knownDatabase); char *desc = sqlQuickString(conn, query); hFreeConn(&conn); if (desc) { // hg38 known genes has extra detail about source; strip it char *fromDetail = strstrNoCase(desc, "(from"); if (fromDetail) *fromDetail = 0; - if (strlen(desc) > MAX_DESC) + // the "..." plus its terminating null needs MAX_DESC+4 bytes of buffer + if (strlen(desc) > MAX_DESC + 4) strcpy(desc+MAX_DESC, "..."); // also strip 'homo sapiens' prefix #define SPECIES_PREFIX "Homo sapiens " if (startsWith(SPECIES_PREFIX, desc)) desc += strlen(SPECIES_PREFIX); geneInfo->description = desc; } else geneInfo->description = geneInfo->geneBed->name; slAddHead(&list, geneInfo); geneBed = geneBed->next; geneInfo->geneBed->next = NULL; if (extras->isComparison && (tg->visibility == tvFull || tg->visibility == tvPack))