mirror of
				https://github.com/SquidDev-CC/CC-Tweaked
				synced 2025-11-03 23:22:59 +00:00 
			
		
		
		
	Use duplicate() instead of rewind()
It's just more confusing having to keep track of where the ByteBuffer is at. In this case, I think we were forgetting to rewind after computing the digest. Hopefully we'll be able to drop some of these in 1.17 as Java 16 has a few more ByteBuffer methods Fixes #992
This commit is contained in:
		@@ -173,7 +173,6 @@ public abstract class ComputerScreenBase<T extends ContainerComputerBase> extend
 | 
			
		||||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                buffer.rewind();
 | 
			
		||||
                toUpload.add( new FileUpload( name, buffer, digest ) );
 | 
			
		||||
            }
 | 
			
		||||
            catch( IOException e )
 | 
			
		||||
 
 | 
			
		||||
@@ -56,7 +56,7 @@ public interface IContainerComputer
 | 
			
		||||
    void continueUpload( @Nonnull UUID uploadId, @Nonnull List<FileSlice> slices );
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Finish off an upload. This either writes the uploaded files or
 | 
			
		||||
     * Finish off an upload. This either writes the uploaded files or informs the user that files will be overwritten.
 | 
			
		||||
     *
 | 
			
		||||
     * @param uploader The player uploading files.
 | 
			
		||||
     * @param uploadId The unique ID of this upload.
 | 
			
		||||
 
 | 
			
		||||
@@ -53,10 +53,9 @@ public class FileSlice
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        bytes.rewind();
 | 
			
		||||
        file.position( offset );
 | 
			
		||||
        file.put( bytes );
 | 
			
		||||
        file.rewind();
 | 
			
		||||
        ByteBuffer other = file.duplicate();
 | 
			
		||||
        other.position( offset ); // TODO: In 1.17 we can use a separate put(idx, _) method.
 | 
			
		||||
        other.put( bytes );
 | 
			
		||||
 | 
			
		||||
        if( bytes.remaining() != 0 ) throw new IllegalStateException( "Should have read the whole buffer" );
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -56,7 +56,7 @@ public class FileUpload
 | 
			
		||||
 | 
			
		||||
    public boolean checksumMatches()
 | 
			
		||||
    {
 | 
			
		||||
        // This is meant to be a checksum. Doesn't need to be cryptographically secure, hence non constant time.
 | 
			
		||||
        // This is meant to be a checksum. Doesn't need to be cryptographically secure, hence non-constant time.
 | 
			
		||||
        byte[] digest = getDigest( bytes );
 | 
			
		||||
        return digest != null && Arrays.equals( checksum, digest );
 | 
			
		||||
    }
 | 
			
		||||
@@ -66,9 +66,8 @@ public class FileUpload
 | 
			
		||||
    {
 | 
			
		||||
        try
 | 
			
		||||
        {
 | 
			
		||||
            bytes.rewind();
 | 
			
		||||
            MessageDigest digest = MessageDigest.getInstance( "SHA-256" );
 | 
			
		||||
            digest.update( bytes );
 | 
			
		||||
            digest.update( bytes.duplicate() );
 | 
			
		||||
            return digest.digest();
 | 
			
		||||
        }
 | 
			
		||||
        catch( NoSuchAlgorithmException e )
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,6 @@
 | 
			
		||||
 */
 | 
			
		||||
package dan200.computercraft.shared.network.server;
 | 
			
		||||
 | 
			
		||||
import dan200.computercraft.ComputerCraft;
 | 
			
		||||
import dan200.computercraft.shared.computer.core.IContainerComputer;
 | 
			
		||||
import dan200.computercraft.shared.computer.core.ServerComputer;
 | 
			
		||||
import dan200.computercraft.shared.computer.upload.FileSlice;
 | 
			
		||||
@@ -122,9 +121,9 @@ public class UploadFileMessage extends ComputerServerMessage
 | 
			
		||||
            buf.writeByte( slice.getFileId() );
 | 
			
		||||
            buf.writeVarInt( slice.getOffset() );
 | 
			
		||||
 | 
			
		||||
            slice.getBytes().rewind();
 | 
			
		||||
            buf.writeShort( slice.getBytes().remaining() );
 | 
			
		||||
            buf.writeBytes( slice.getBytes() );
 | 
			
		||||
            ByteBuffer bytes = slice.getBytes().duplicate();
 | 
			
		||||
            buf.writeShort( bytes.remaining() );
 | 
			
		||||
            buf.writeBytes( bytes );
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -158,7 +157,6 @@ public class UploadFileMessage extends ComputerServerMessage
 | 
			
		||||
 | 
			
		||||
                int canWrite = Math.min( remaining, capacity - currentOffset );
 | 
			
		||||
 | 
			
		||||
                ComputerCraft.log.info( "Adding slice from {} to {}", currentOffset, currentOffset + canWrite - 1 );
 | 
			
		||||
                contents.position( currentOffset ).limit( currentOffset + canWrite );
 | 
			
		||||
                slices.add( new FileSlice( fileId, currentOffset, contents.slice() ) );
 | 
			
		||||
                currentOffset += canWrite;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user