@@ -493,7 +493,7 @@ func (r *Resource) pack(msg []byte, compression map[string]int, compressionOff i
493
493
}
494
494
oldMsg := msg
495
495
r .Header .Type = r .Body .realType ()
496
- msg , length , err := r .Header .pack (msg , compression , compressionOff )
496
+ msg , lenOff , err := r .Header .pack (msg , compression , compressionOff )
497
497
if err != nil {
498
498
return msg , & nestedError {"ResourceHeader" , err }
499
499
}
@@ -502,7 +502,7 @@ func (r *Resource) pack(msg []byte, compression map[string]int, compressionOff i
502
502
if err != nil {
503
503
return msg , & nestedError {"content" , err }
504
504
}
505
- if err := r .Header .fixLen (msg , length , preLen ); err != nil {
505
+ if err := r .Header .fixLen (msg , lenOff , preLen ); err != nil {
506
506
return oldMsg , err
507
507
}
508
508
return msg , nil
@@ -1323,15 +1323,15 @@ func (b *Builder) CNAMEResource(h ResourceHeader, r CNAMEResource) error {
1323
1323
return err
1324
1324
}
1325
1325
h .Type = r .realType ()
1326
- msg , length , err := h .pack (b .msg , b .compression , b .start )
1326
+ msg , lenOff , err := h .pack (b .msg , b .compression , b .start )
1327
1327
if err != nil {
1328
1328
return & nestedError {"ResourceHeader" , err }
1329
1329
}
1330
1330
preLen := len (msg )
1331
1331
if msg , err = r .pack (msg , b .compression , b .start ); err != nil {
1332
1332
return & nestedError {"CNAMEResource body" , err }
1333
1333
}
1334
- if err := h .fixLen (msg , length , preLen ); err != nil {
1334
+ if err := h .fixLen (msg , lenOff , preLen ); err != nil {
1335
1335
return err
1336
1336
}
1337
1337
if err := b .incrementSectionCount (); err != nil {
@@ -1347,15 +1347,15 @@ func (b *Builder) MXResource(h ResourceHeader, r MXResource) error {
1347
1347
return err
1348
1348
}
1349
1349
h .Type = r .realType ()
1350
- msg , length , err := h .pack (b .msg , b .compression , b .start )
1350
+ msg , lenOff , err := h .pack (b .msg , b .compression , b .start )
1351
1351
if err != nil {
1352
1352
return & nestedError {"ResourceHeader" , err }
1353
1353
}
1354
1354
preLen := len (msg )
1355
1355
if msg , err = r .pack (msg , b .compression , b .start ); err != nil {
1356
1356
return & nestedError {"MXResource body" , err }
1357
1357
}
1358
- if err := h .fixLen (msg , length , preLen ); err != nil {
1358
+ if err := h .fixLen (msg , lenOff , preLen ); err != nil {
1359
1359
return err
1360
1360
}
1361
1361
if err := b .incrementSectionCount (); err != nil {
@@ -1371,15 +1371,15 @@ func (b *Builder) NSResource(h ResourceHeader, r NSResource) error {
1371
1371
return err
1372
1372
}
1373
1373
h .Type = r .realType ()
1374
- msg , length , err := h .pack (b .msg , b .compression , b .start )
1374
+ msg , lenOff , err := h .pack (b .msg , b .compression , b .start )
1375
1375
if err != nil {
1376
1376
return & nestedError {"ResourceHeader" , err }
1377
1377
}
1378
1378
preLen := len (msg )
1379
1379
if msg , err = r .pack (msg , b .compression , b .start ); err != nil {
1380
1380
return & nestedError {"NSResource body" , err }
1381
1381
}
1382
- if err := h .fixLen (msg , length , preLen ); err != nil {
1382
+ if err := h .fixLen (msg , lenOff , preLen ); err != nil {
1383
1383
return err
1384
1384
}
1385
1385
if err := b .incrementSectionCount (); err != nil {
@@ -1395,15 +1395,15 @@ func (b *Builder) PTRResource(h ResourceHeader, r PTRResource) error {
1395
1395
return err
1396
1396
}
1397
1397
h .Type = r .realType ()
1398
- msg , length , err := h .pack (b .msg , b .compression , b .start )
1398
+ msg , lenOff , err := h .pack (b .msg , b .compression , b .start )
1399
1399
if err != nil {
1400
1400
return & nestedError {"ResourceHeader" , err }
1401
1401
}
1402
1402
preLen := len (msg )
1403
1403
if msg , err = r .pack (msg , b .compression , b .start ); err != nil {
1404
1404
return & nestedError {"PTRResource body" , err }
1405
1405
}
1406
- if err := h .fixLen (msg , length , preLen ); err != nil {
1406
+ if err := h .fixLen (msg , lenOff , preLen ); err != nil {
1407
1407
return err
1408
1408
}
1409
1409
if err := b .incrementSectionCount (); err != nil {
@@ -1419,15 +1419,15 @@ func (b *Builder) SOAResource(h ResourceHeader, r SOAResource) error {
1419
1419
return err
1420
1420
}
1421
1421
h .Type = r .realType ()
1422
- msg , length , err := h .pack (b .msg , b .compression , b .start )
1422
+ msg , lenOff , err := h .pack (b .msg , b .compression , b .start )
1423
1423
if err != nil {
1424
1424
return & nestedError {"ResourceHeader" , err }
1425
1425
}
1426
1426
preLen := len (msg )
1427
1427
if msg , err = r .pack (msg , b .compression , b .start ); err != nil {
1428
1428
return & nestedError {"SOAResource body" , err }
1429
1429
}
1430
- if err := h .fixLen (msg , length , preLen ); err != nil {
1430
+ if err := h .fixLen (msg , lenOff , preLen ); err != nil {
1431
1431
return err
1432
1432
}
1433
1433
if err := b .incrementSectionCount (); err != nil {
@@ -1443,15 +1443,15 @@ func (b *Builder) TXTResource(h ResourceHeader, r TXTResource) error {
1443
1443
return err
1444
1444
}
1445
1445
h .Type = r .realType ()
1446
- msg , length , err := h .pack (b .msg , b .compression , b .start )
1446
+ msg , lenOff , err := h .pack (b .msg , b .compression , b .start )
1447
1447
if err != nil {
1448
1448
return & nestedError {"ResourceHeader" , err }
1449
1449
}
1450
1450
preLen := len (msg )
1451
1451
if msg , err = r .pack (msg , b .compression , b .start ); err != nil {
1452
1452
return & nestedError {"TXTResource body" , err }
1453
1453
}
1454
- if err := h .fixLen (msg , length , preLen ); err != nil {
1454
+ if err := h .fixLen (msg , lenOff , preLen ); err != nil {
1455
1455
return err
1456
1456
}
1457
1457
if err := b .incrementSectionCount (); err != nil {
@@ -1467,15 +1467,15 @@ func (b *Builder) SRVResource(h ResourceHeader, r SRVResource) error {
1467
1467
return err
1468
1468
}
1469
1469
h .Type = r .realType ()
1470
- msg , length , err := h .pack (b .msg , b .compression , b .start )
1470
+ msg , lenOff , err := h .pack (b .msg , b .compression , b .start )
1471
1471
if err != nil {
1472
1472
return & nestedError {"ResourceHeader" , err }
1473
1473
}
1474
1474
preLen := len (msg )
1475
1475
if msg , err = r .pack (msg , b .compression , b .start ); err != nil {
1476
1476
return & nestedError {"SRVResource body" , err }
1477
1477
}
1478
- if err := h .fixLen (msg , length , preLen ); err != nil {
1478
+ if err := h .fixLen (msg , lenOff , preLen ); err != nil {
1479
1479
return err
1480
1480
}
1481
1481
if err := b .incrementSectionCount (); err != nil {
@@ -1491,15 +1491,15 @@ func (b *Builder) AResource(h ResourceHeader, r AResource) error {
1491
1491
return err
1492
1492
}
1493
1493
h .Type = r .realType ()
1494
- msg , length , err := h .pack (b .msg , b .compression , b .start )
1494
+ msg , lenOff , err := h .pack (b .msg , b .compression , b .start )
1495
1495
if err != nil {
1496
1496
return & nestedError {"ResourceHeader" , err }
1497
1497
}
1498
1498
preLen := len (msg )
1499
1499
if msg , err = r .pack (msg , b .compression , b .start ); err != nil {
1500
1500
return & nestedError {"AResource body" , err }
1501
1501
}
1502
- if err := h .fixLen (msg , length , preLen ); err != nil {
1502
+ if err := h .fixLen (msg , lenOff , preLen ); err != nil {
1503
1503
return err
1504
1504
}
1505
1505
if err := b .incrementSectionCount (); err != nil {
@@ -1515,15 +1515,15 @@ func (b *Builder) AAAAResource(h ResourceHeader, r AAAAResource) error {
1515
1515
return err
1516
1516
}
1517
1517
h .Type = r .realType ()
1518
- msg , length , err := h .pack (b .msg , b .compression , b .start )
1518
+ msg , lenOff , err := h .pack (b .msg , b .compression , b .start )
1519
1519
if err != nil {
1520
1520
return & nestedError {"ResourceHeader" , err }
1521
1521
}
1522
1522
preLen := len (msg )
1523
1523
if msg , err = r .pack (msg , b .compression , b .start ); err != nil {
1524
1524
return & nestedError {"AAAAResource body" , err }
1525
1525
}
1526
- if err := h .fixLen (msg , length , preLen ); err != nil {
1526
+ if err := h .fixLen (msg , lenOff , preLen ); err != nil {
1527
1527
return err
1528
1528
}
1529
1529
if err := b .incrementSectionCount (); err != nil {
@@ -1539,15 +1539,15 @@ func (b *Builder) OPTResource(h ResourceHeader, r OPTResource) error {
1539
1539
return err
1540
1540
}
1541
1541
h .Type = r .realType ()
1542
- msg , length , err := h .pack (b .msg , b .compression , b .start )
1542
+ msg , lenOff , err := h .pack (b .msg , b .compression , b .start )
1543
1543
if err != nil {
1544
1544
return & nestedError {"ResourceHeader" , err }
1545
1545
}
1546
1546
preLen := len (msg )
1547
1547
if msg , err = r .pack (msg , b .compression , b .start ); err != nil {
1548
1548
return & nestedError {"OPTResource body" , err }
1549
1549
}
1550
- if err := h .fixLen (msg , length , preLen ); err != nil {
1550
+ if err := h .fixLen (msg , lenOff , preLen ); err != nil {
1551
1551
return err
1552
1552
}
1553
1553
if err := b .incrementSectionCount (); err != nil {
@@ -1606,19 +1606,18 @@ func (h *ResourceHeader) GoString() string {
1606
1606
1607
1607
// pack appends the wire format of the ResourceHeader to oldMsg.
1608
1608
//
1609
- // The bytes where length was packed are returned as a slice so they can be
1610
- // updated after the rest of the Resource has been packed.
1611
- func (h * ResourceHeader ) pack (oldMsg []byte , compression map [string ]int , compressionOff int ) (msg []byte , length []byte , err error ) {
1609
+ // lenOff is the offset in msg where the Length field was packed.
1610
+ func (h * ResourceHeader ) pack (oldMsg []byte , compression map [string ]int , compressionOff int ) (msg []byte , lenOff int , err error ) {
1612
1611
msg = oldMsg
1613
1612
if msg , err = h .Name .pack (msg , compression , compressionOff ); err != nil {
1614
- return oldMsg , nil , & nestedError {"Name" , err }
1613
+ return oldMsg , 0 , & nestedError {"Name" , err }
1615
1614
}
1616
1615
msg = packType (msg , h .Type )
1617
1616
msg = packClass (msg , h .Class )
1618
1617
msg = packUint32 (msg , h .TTL )
1619
- lenBegin : = len (msg )
1618
+ lenOff = len (msg )
1620
1619
msg = packUint16 (msg , h .Length )
1621
- return msg , msg [ lenBegin : lenBegin + uint16Len ] , nil
1620
+ return msg , lenOff , nil
1622
1621
}
1623
1622
1624
1623
func (h * ResourceHeader ) unpack (msg []byte , off int ) (int , error ) {
@@ -1642,14 +1641,20 @@ func (h *ResourceHeader) unpack(msg []byte, off int) (int, error) {
1642
1641
return newOff , nil
1643
1642
}
1644
1643
1645
- func (h * ResourceHeader ) fixLen (msg []byte , length []byte , preLen int ) error {
1644
+ // fixLen updates a packed ResourceHeader to include the length of the
1645
+ // ResourceBody.
1646
+ //
1647
+ // lenOff is the offset of the ResourceHeader.Length field in msg.
1648
+ //
1649
+ // preLen is the length that msg was before the ResourceBody was packed.
1650
+ func (h * ResourceHeader ) fixLen (msg []byte , lenOff int , preLen int ) error {
1646
1651
conLen := len (msg ) - preLen
1647
1652
if conLen > int (^ uint16 (0 )) {
1648
1653
return errResTooLong
1649
1654
}
1650
1655
1651
1656
// Fill in the length now that we know how long the content is.
1652
- packUint16 (length [: 0 ], uint16 (conLen ))
1657
+ packUint16 (msg [ lenOff : lenOff ], uint16 (conLen ))
1653
1658
h .Length = uint16 (conLen )
1654
1659
1655
1660
return nil
0 commit comments