[ https://issues.apache.org/jira/browse/TS-4313?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15222004#comment-15222004 ]
ASF GitHub Bot commented on TS-4313: ------------------------------------ Github user jpeach commented on a diff in the pull request: https://github.com/apache/trafficserver/pull/542#discussion_r58236316 --- Diff: proxy/hdrs/test_mime.cc --- @@ -0,0 +1,80 @@ +/** @file + + A brief file description + + @section license License + + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + +#include "P_Eventsystem.h" +#include "MIME.h" + +static void +test_mime() +{ + int failed = 0; + MIMEField *field; + MIMEHdr hdr; + hdr.create(NULL); + + hdr.field_create("Test1", 5); + hdr.field_create("Test2", 5); + hdr.field_create("Test3", 5); + hdr.field_create("Test4", 5); + field = hdr.field_create("Test5", 5); + if (!hdr.m_mime->m_first_fblock.contains(field)) { + printf("FAILED: The field block doesn't contain the field but it should\n\n"); + failed = 1; + } + if (hdr.m_mime->m_first_fblock.contains(field + (1L << 32))) { + printf("FAILED: The field block contains the field but it shouldn't\n\n"); + failed = 1; + } + + int slot_num = mime_hdr_field_slotnum(hdr.m_mime, field); + if (slot_num != 4) { + printf("FAILED: Slot number is %d but should be 4\n\n", slot_num); + failed = 1; + } + + slot_num = mime_hdr_field_slotnum(hdr.m_mime, field + (1L << 32)); + if (slot_num != -1) { + printf("FAILED: Slot number is %d but should be -1\n\n", slot_num); + failed = 1; + } + + hdr.destroy(); + + printf("*** %s ***\n", (failed ? "FAILED" : "PASSED")); + if (failed) { + exit(1); + } +} + +int +main(int argc, char *argv[]) +{ + Thread *main_thread = new EThread; + main_thread->set_specific(); + mime_init(); + + test_mime(); --- End diff -- This is nice! Could you use ``<ts/TestBox.h>`` for the test harness? (see plugins/experimental/sslheaders/test_sslheaders.cc, for example). > MIMEHdr fails to find header fields > ----------------------------------- > > Key: TS-4313 > URL: https://issues.apache.org/jira/browse/TS-4313 > Project: Traffic Server > Issue Type: Bug > Components: MIME > Reporter: Masakazu Kitajo > Assignee: Masakazu Kitajo > Fix For: 6.2.0 > > > MIMEHdr fails to find a MIMEField occasionally due to improper type > conversion. > It happens if the lower 32 bits of addresses of m_field_slots are the same. > The logic below picks up wrong block. > mime_hdr_field_slotnum(): > {code} > for (fblock = &(mh->m_first_fblock); fblock != NULL; fblock = fblock->m_next) > { > MIMEField *first = &(fblock->m_field_slots[0]); > int block_slot = (int)(field - first); // in units of MIMEField > if ((block_slot >= 0) && (block_slot < MIME_FIELD_BLOCK_SLOTS)) > {code} > The type of block_slot should be intptr_t. -- This message was sent by Atlassian JIRA (v6.3.4#6332)