- file->sum = new_array(char, MD4_SUM_LENGTH);
- if (!file->sum)
- out_of_memory("md4 sum");
- if (protocol_version < 21)
- read_buf(f, file->sum, 2);
- else
- read_buf(f, file->sum, MD4_SUM_LENGTH);
+ char *sum;
+ if (S_ISREG(mode)) {
+ sum = file->u.sum = new_array(char, MD4_SUM_LENGTH);
+ if (!sum)
+ out_of_memory("md4 sum");
+ } else if (protocol_version < 28) {
+ /* Prior to 28, we get a useless set of nulls. */
+ sum = empty_sum;
+ } else
+ sum = NULL;
+ if (sum) {
+ read_buf(f, sum, protocol_version < 21? 2
+ : MD4_SUM_LENGTH);
+ }