Fossil

Check-in [327eee1452]
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Fix to the /hash-collisions page: Only consider the SHA1 hashes in the BLOB table, not the random hexadecimal identifiers assigned to tickets and tech-notes. The latter two live in a different namespace.
Downloads: Tarball | ZIP archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: 327eee14525ff1c98f4f36e73c8ed24ded7fc55c
User & Date: drh 2015-02-11 13:18:00.092
Context
2015-02-11
13:34
Fix a problem in /hash-collisions that was causing the links to remain directed to the honeypot. check-in: aa12ac91cf user: drh tags: trunk
13:18
Fix to the /hash-collisions page: Only consider the SHA1 hashes in the BLOB table, not the random hexadecimal identifiers assigned to tickets and tech-notes. The latter two live in a different namespace. check-in: 327eee1452 user: drh tags: trunk
12:36
On the /hash-collisions page, list the longer collisions with links to /whatid. check-in: 3234cf1efe user: drh tags: trunk
Changes
Unified Diff Ignore Whitespace Patch
Changes to src/name.c.
102
103
104
105
106
107
108





109
110
111
112
113
114
115
**
** The zType parameter specifies the type of artifact: ci, t, w, e, g.
** If zType is NULL or "" or "*" then any type of artifact will serve.
** If zType is "br" then find the first check-in of the named branch
** rather than the last.
** zType is "ci" in most use cases since we are usually searching for
** a check-in.





*/
int symbolic_name_to_rid(const char *zTag, const char *zType){
  int vid;
  int rid = 0;
  int nTag;
  int i;
  int startOfBranch = 0;







>
>
>
>
>







102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
**
** The zType parameter specifies the type of artifact: ci, t, w, e, g.
** If zType is NULL or "" or "*" then any type of artifact will serve.
** If zType is "br" then find the first check-in of the named branch
** rather than the last.
** zType is "ci" in most use cases since we are usually searching for
** a check-in.
**
** Note that the input zTag for types "t" and "e" is the SHA1 hash of
** the ticket-change or event-change artifact, not the randomly generated
** hexadecimal identifier assigned to tickets and events.  Those identifiers
** live in a separate namespace.
*/
int symbolic_name_to_rid(const char *zTag, const char *zType){
  int vid;
  int rid = 0;
  int nTag;
  int i;
  int startOfBranch = 0;
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
    char z[UUID_SIZE+1];
  } aCollide[UUID_SIZE+1];
  login_check_credentials();
  if( !g.perm.Read ){ login_needed(); return; }
  memset(aCollide, 0, sizeof(aCollide));
  for(i=0; i<ArraySize(aCollide); i++) blob_init(&aCollide[i].ex,0,0);
  memset(zPrev, 0, sizeof(zPrev));
  db_prepare(&q,
      "SELECT tkt_uuid FROM ticket\n"
      "UNION ALL\n"
      "SELECT substr(tagname,7) FROM tag WHERE tagname GLOB 'event-*'\n"
      "UNION ALL\n"
      "SELECT uuid FROM blob\n"
      "ORDER BY 1"
  );
  while( db_step(&q)==SQLITE_ROW ){
    const char *zUuid = db_column_text(&q,0);
    int n = db_column_bytes(&q,0);
    int i;
    nHash++;
    for(i=0; zPrev[i] && zPrev[i]==zUuid[i]; i++){}
    if( i>0 && i<=UUID_SIZE ){







|
<
<
<
<
<
<
<







1082
1083
1084
1085
1086
1087
1088
1089







1090
1091
1092
1093
1094
1095
1096
    char z[UUID_SIZE+1];
  } aCollide[UUID_SIZE+1];
  login_check_credentials();
  if( !g.perm.Read ){ login_needed(); return; }
  memset(aCollide, 0, sizeof(aCollide));
  for(i=0; i<ArraySize(aCollide); i++) blob_init(&aCollide[i].ex,0,0);
  memset(zPrev, 0, sizeof(zPrev));
  db_prepare(&q,"SELECT uuid FROM blob ORDER BY 1");







  while( db_step(&q)==SQLITE_ROW ){
    const char *zUuid = db_column_text(&q,0);
    int n = db_column_bytes(&q,0);
    int i;
    nHash++;
    for(i=0; zPrev[i] && zPrev[i]==zUuid[i]; i++){}
    if( i>0 && i<=UUID_SIZE ){