FileUtils contentEquals does not work with big files

44 Views Asked by At

I was using commons-io version 2.12.0 and my code worked fine regardless of file size. But when I upgraded to 2.15.0, my code only works with small files. When the file size is 8347 bytes, the comparison works. But, when the file size is bigger than 8348 bytes, the comparison always returns true.

Is this a bug from commons-io library?

I am using Amazon Corretto 11.0.21.9.1 on Windows 10 box.

Here is my sample code.

import java.io.File;
import java.io.IOException;

import org.apache.commons.io.FileUtils;

public class Test15 {

  public static void main(String[] args) {
    File tmpFile1 = new File("file1.xml");
    File tmpFile2 = new File("file2.xml");
    try {
      boolean filesEqual = FileUtils.contentEquals(tmpFile1, tmpFile2);
      System.out.println(filesEqual);
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

Here is a sample file to compare. They have exact same file size.

<?xml version="1.0" encoding="UTF-8"?>
<PpppppppppppData>
    <LooooData>
        <Ssssss>
            <ProfName>ProfName2</ProfName>
            <Version>2</Version>
            <TimeStamp>00000000</TimeStamp>
            <CcccccDddd>
                <GggIiAaaaa>
                    <Version>33333</Version>
                    <Site>
                        <SiteID>4</SiteID>
                        <Iiii>
                            <CcAddress></CcAddress>
                            <CcAddress>0.0.0</CcAddress>
                            <IpppSuuuuu>
                                <RooooooPppppp></RooooooPppppp>
                                <SuuuuuMaaa></SuuuuuMaaa>
                            </IpppSuuuuu>
                            <IpppSuuuuu>
                                <SsssssIi>8</SsssssIi>
                                <RooooooPppppp></RooooooPppppp>
                                <SuuuuuMaaa></SuuuuuMaaa>
                            </IpppSuuuuu>
                            <IpppSuuuuu>
                                <SsssssIi>8</SsssssIi>
                                <RooooooPppppp></RooooooPppppp>
                                <SuuuuuMaaa></SuuuuuMaaa>
                            </IpppSuuuuu>
                            <IpppSuuuuu>
                                <SsssssIi>8</SsssssIi>
                                <RooooooPppppp></RooooooPppppp>
                                <SuuuuuMaaa></SuuuuuMaaa>
                            </IpppSuuuuu>
                            <IpppSuuuuu>
                                <SsssssIi>8</SsssssIi>
                                <RooooooPppppp>0.0.0.0</RooooooPppppp>
                                <SuuuuuMaaa>0.0.0.0</SuuuuuMaaa>
                            </IpppSuuuuu>
                            <IpppSuuuuu>
                                <SsssssIi>8</SsssssIi>
                                <RooooooPppppp>0.0.0.0</RooooooPppppp>
                                <SuuuuuMaaa>0.0.0.0</SuuuuuMaaa>
                            </IpppSuuuuu>
                            <IpppSuuuuu>
                                <SsssssIi>8</SsssssIi>
                                <RooooooPppppp>0.0.0.0</RooooooPppppp>
                                <SuuuuuMaaa>0.0.0.0</SuuuuuMaaa>
                            </IpppSuuuuu>
                            <IpppSuuuuu>
                                <SsssssIi>8</SsssssIi>
                                <RooooooPppppp>0.0.0.0</RooooooPppppp>
                                <SuuuuuMaaa>0.0.0.0</SuuuuuMaaa>
                            </IpppSuuuuu>
                            <IpppSuuuuu>
                                <SsssssIi>8</SsssssIi>
                                <RooooooPppppp>0.0.0.0</RooooooPppppp>
                                <SuuuuuMaaa>0.0.0.0</SuuuuuMaaa>
                            </IpppSuuuuu>
                            <IpppSuuuuu>
                                <SsssssIi>8</SsssssIi>
                                <RooooooPppppp>0.0.0.0</RooooooPppppp>
                                <SuuuuuMaaa>0.0.0.0</SuuuuuMaaa>
                            </IpppSuuuuu>
                            <IpppSuuuuu>
                                <SsssssIi>8</SsssssIi>
                                <RooooooPppppp>0.0.0.0</RooooooPppppp>
                                <SuuuuuMaaa>0.0.0.0</SuuuuuMaaa>
                            </IpppSuuuuu>
                        </Iiii>
                        <Iiii>
                            <CcAddress>0:0:0:0:0:0:0:0</CcAddress>
                            <CcAddress>0:0:0:0:0:0:0:0</CcAddress>
                            <IiiiSuuuuu>
                                <SsssssIi>8</SsssssIi>
                                <RooooooPppppp>0:0:0:0:0:0:0:0</RooooooPppppp>
                                <SuuuuuMaaa>64</SuuuuuMaaa>
                            </IiiiSuuuuu>
                            <IiiiSuuuuu>
                                <SsssssIi>8</SsssssIi>
                                <RooooooPppppp>0:0:0:0:0:0:0:0</RooooooPppppp>
                                <SuuuuuMaaa>64</SuuuuuMaaa>
                            </IiiiSuuuuu>
                            <IiiiSuuuuu>
                                <SsssssIi>8</SsssssIi>
                                <RooooooPppppp>0:0:0:0:0:0:0:0</RooooooPppppp>
                                <SuuuuuMaaa>64</SuuuuuMaaa>
                            </IiiiSuuuuu>
                            <IiiiSuuuuu>
                                <SsssssIi>8</SsssssIi>
                                <RooooooPppppp>0:0:0:0:0:0:0:0</RooooooPppppp>
                                <SuuuuuMaaa>64</SuuuuuMaaa>
                            </IiiiSuuuuu>
                            <IiiiSuuuuu>
                                <SsssssIi>8</SsssssIi>
                                <RooooooPppppp>0:0:0:0:0:0:0:0</RooooooPppppp>
                                <SuuuuuMaaa>64</SuuuuuMaaa>
                            </IiiiSuuuuu>
                            <IiiiSuuuuu>
                                <SsssssIi>8</SsssssIi>
                                <RooooooPppppp>0:0:0:0:0:0:0:0</RooooooPppppp>
                                <SuuuuuMaaa>64</SuuuuuMaaa>
                            </IiiiSuuuuu>
                            <IiiiSuuuuu>
                                <SsssssIi>8</SsssssIi>
                                <RooooooPppppp>0:0:0:0:0:0:0:0</RooooooPppppp>
                                <SuuuuuMaaa>64</SuuuuuMaaa>
                            </IiiiSuuuuu>
                            <IiiiSuuuuu>
                                <SsssssIi>8</SsssssIi>
                                <RooooooPppppp>0:0:0:0:0:0:0:0</RooooooPppppp>
                                <SuuuuuMaaa>64</SuuuuuMaaa>
                            </IiiiSuuuuu>
                            <IiiiSuuuuu>
                                <SsssssIi>8</SsssssIi>
                                <RooooooPppppp>0:0:0:0:0:0:0:0</RooooooPppppp>
                                <SuuuuuMaaa>64</SuuuuuMaaa>
                            </IiiiSuuuuu>
                            <IiiiSuuuuu>
                                <SsssssIi>8</SsssssIi>
                                <RooooooPppppp>0:0:0:0:0:0:0:0</RooooooPppppp>
                                <SuuuuuMaaa>64</SuuuuuMaaa>
                            </IiiiSuuuuu>
                            <IiiiSuuuuu>
                                <SsssssIi>8</SsssssIi>
                                <RooooooPppppp>0:0:0:0:0:0:0:0</RooooooPppppp>
                                <SuuuuuMaaa>64</SuuuuuMaaa>
                            </IiiiSuuuuu>
                            <IiiiSuuuuu>
                                <SsssssIi>8</SsssssIi>
                                <RooooooPppppp>0:0:0:0:0:0:0:0</RooooooPppppp>
                                <SuuuuuMaaa>64</SuuuuuMaaa>
                            </IiiiSuuuuu>
                            <IiiiSuuuuu>
                                <SsssssIi>8</SsssssIi>
                                <RooooooPppppp>0:0:0:0:0:0:0:0</RooooooPppppp>
                                <SuuuuuMaaa>64</SuuuuuMaaa>
                            </IiiiSuuuuu>
                            <IiiiSuuuuu>
                                <SsssssIi>8</SsssssIi>
                                <RooooooPppppp>0:0:0:0:0:0:0:0</RooooooPppppp>
                                <SuuuuuMaaa>64</SuuuuuMaaa>
                            </IiiiSuuuuu>
                            <IiiiSuuuuu>
                                <SsssssIi>8</SsssssIi>
                                <RooooooPppppp>0:0:0:0:0:0:0:0</RooooooPppppp>
                                <SuuuuuMaaa>64</SuuuuuMaaa>
                            </IiiiSuuuuu>
                            <IiiiSuuuuu>
                                <SsssssIi>8</SsssssIi>
                                <RooooooPppppp>0:0:0:0:0:0:0:0</RooooooPppppp>
                                <SuuuuuMaaa>64</SuuuuuMaaa>
                            </IiiiSuuuuu>
                        </Iiii>
                    </Site>
                </GggIiAaaaa>
            </CcccccDddd>
        </Ssssss>
        <Siiiiiiii>ZGVmYXVsdA==</Siiiiiiii>
        <PPPPPPP>
            <CcrrDddd>ZGVmYXVsdA==</CcrrDddd>
        </PPPPPPP>
    </LooooData>
</PpppppppppppData>

Another one... notice that only ProfName and Version is different.

<?xml version="1.0" encoding="UTF-8"?>
<PpppppppppppData>
    <LooooData>
        <Ssssss>
            <ProfName>ProfName1</ProfName>
            <Version>1</Version>
            <TimeStamp>00000000</TimeStamp>
            <CcccccDddd>
                <GggIiAaaaa>
                    <Version>33333</Version>
                    <Site>
                        <SiteID>4</SiteID>
                        <Iiii>
                            <CcAddress></CcAddress>
                            <CcAddress>0.0.0</CcAddress>
                            <IpppSuuuuu>
                                <RooooooPppppp></RooooooPppppp>
                                <SuuuuuMaaa></SuuuuuMaaa>
                            </IpppSuuuuu>
                            <IpppSuuuuu>
                                <SsssssIi>8</SsssssIi>
                                <RooooooPppppp></RooooooPppppp>
                                <SuuuuuMaaa></SuuuuuMaaa>
                            </IpppSuuuuu>
                            <IpppSuuuuu>
                                <SsssssIi>8</SsssssIi>
                                <RooooooPppppp></RooooooPppppp>
                                <SuuuuuMaaa></SuuuuuMaaa>
                            </IpppSuuuuu>
                            <IpppSuuuuu>
                                <SsssssIi>8</SsssssIi>
                                <RooooooPppppp></RooooooPppppp>
                                <SuuuuuMaaa></SuuuuuMaaa>
                            </IpppSuuuuu>
                            <IpppSuuuuu>
                                <SsssssIi>8</SsssssIi>
                                <RooooooPppppp>0.0.0.0</RooooooPppppp>
                                <SuuuuuMaaa>0.0.0.0</SuuuuuMaaa>
                            </IpppSuuuuu>
                            <IpppSuuuuu>
                                <SsssssIi>8</SsssssIi>
                                <RooooooPppppp>0.0.0.0</RooooooPppppp>
                                <SuuuuuMaaa>0.0.0.0</SuuuuuMaaa>
                            </IpppSuuuuu>
                            <IpppSuuuuu>
                                <SsssssIi>8</SsssssIi>
                                <RooooooPppppp>0.0.0.0</RooooooPppppp>
                                <SuuuuuMaaa>0.0.0.0</SuuuuuMaaa>
                            </IpppSuuuuu>
                            <IpppSuuuuu>
                                <SsssssIi>8</SsssssIi>
                                <RooooooPppppp>0.0.0.0</RooooooPppppp>
                                <SuuuuuMaaa>0.0.0.0</SuuuuuMaaa>
                            </IpppSuuuuu>
                            <IpppSuuuuu>
                                <SsssssIi>8</SsssssIi>
                                <RooooooPppppp>0.0.0.0</RooooooPppppp>
                                <SuuuuuMaaa>0.0.0.0</SuuuuuMaaa>
                            </IpppSuuuuu>
                            <IpppSuuuuu>
                                <SsssssIi>8</SsssssIi>
                                <RooooooPppppp>0.0.0.0</RooooooPppppp>
                                <SuuuuuMaaa>0.0.0.0</SuuuuuMaaa>
                            </IpppSuuuuu>
                            <IpppSuuuuu>
                                <SsssssIi>8</SsssssIi>
                                <RooooooPppppp>0.0.0.0</RooooooPppppp>
                                <SuuuuuMaaa>0.0.0.0</SuuuuuMaaa>
                            </IpppSuuuuu>
                        </Iiii>
                        <Iiii>
                            <CcAddress>0:0:0:0:0:0:0:0</CcAddress>
                            <CcAddress>0:0:0:0:0:0:0:0</CcAddress>
                            <IiiiSuuuuu>
                                <SsssssIi>8</SsssssIi>
                                <RooooooPppppp>0:0:0:0:0:0:0:0</RooooooPppppp>
                                <SuuuuuMaaa>64</SuuuuuMaaa>
                            </IiiiSuuuuu>
                            <IiiiSuuuuu>
                                <SsssssIi>8</SsssssIi>
                                <RooooooPppppp>0:0:0:0:0:0:0:0</RooooooPppppp>
                                <SuuuuuMaaa>64</SuuuuuMaaa>
                            </IiiiSuuuuu>
                            <IiiiSuuuuu>
                                <SsssssIi>8</SsssssIi>
                                <RooooooPppppp>0:0:0:0:0:0:0:0</RooooooPppppp>
                                <SuuuuuMaaa>64</SuuuuuMaaa>
                            </IiiiSuuuuu>
                            <IiiiSuuuuu>
                                <SsssssIi>8</SsssssIi>
                                <RooooooPppppp>0:0:0:0:0:0:0:0</RooooooPppppp>
                                <SuuuuuMaaa>64</SuuuuuMaaa>
                            </IiiiSuuuuu>
                            <IiiiSuuuuu>
                                <SsssssIi>8</SsssssIi>
                                <RooooooPppppp>0:0:0:0:0:0:0:0</RooooooPppppp>
                                <SuuuuuMaaa>64</SuuuuuMaaa>
                            </IiiiSuuuuu>
                            <IiiiSuuuuu>
                                <SsssssIi>8</SsssssIi>
                                <RooooooPppppp>0:0:0:0:0:0:0:0</RooooooPppppp>
                                <SuuuuuMaaa>64</SuuuuuMaaa>
                            </IiiiSuuuuu>
                            <IiiiSuuuuu>
                                <SsssssIi>8</SsssssIi>
                                <RooooooPppppp>0:0:0:0:0:0:0:0</RooooooPppppp>
                                <SuuuuuMaaa>64</SuuuuuMaaa>
                            </IiiiSuuuuu>
                            <IiiiSuuuuu>
                                <SsssssIi>8</SsssssIi>
                                <RooooooPppppp>0:0:0:0:0:0:0:0</RooooooPppppp>
                                <SuuuuuMaaa>64</SuuuuuMaaa>
                            </IiiiSuuuuu>
                            <IiiiSuuuuu>
                                <SsssssIi>8</SsssssIi>
                                <RooooooPppppp>0:0:0:0:0:0:0:0</RooooooPppppp>
                                <SuuuuuMaaa>64</SuuuuuMaaa>
                            </IiiiSuuuuu>
                            <IiiiSuuuuu>
                                <SsssssIi>8</SsssssIi>
                                <RooooooPppppp>0:0:0:0:0:0:0:0</RooooooPppppp>
                                <SuuuuuMaaa>64</SuuuuuMaaa>
                            </IiiiSuuuuu>
                            <IiiiSuuuuu>
                                <SsssssIi>8</SsssssIi>
                                <RooooooPppppp>0:0:0:0:0:0:0:0</RooooooPppppp>
                                <SuuuuuMaaa>64</SuuuuuMaaa>
                            </IiiiSuuuuu>
                            <IiiiSuuuuu>
                                <SsssssIi>8</SsssssIi>
                                <RooooooPppppp>0:0:0:0:0:0:0:0</RooooooPppppp>
                                <SuuuuuMaaa>64</SuuuuuMaaa>
                            </IiiiSuuuuu>
                            <IiiiSuuuuu>
                                <SsssssIi>8</SsssssIi>
                                <RooooooPppppp>0:0:0:0:0:0:0:0</RooooooPppppp>
                                <SuuuuuMaaa>64</SuuuuuMaaa>
                            </IiiiSuuuuu>
                            <IiiiSuuuuu>
                                <SsssssIi>8</SsssssIi>
                                <RooooooPppppp>0:0:0:0:0:0:0:0</RooooooPppppp>
                                <SuuuuuMaaa>64</SuuuuuMaaa>
                            </IiiiSuuuuu>
                            <IiiiSuuuuu>
                                <SsssssIi>8</SsssssIi>
                                <RooooooPppppp>0:0:0:0:0:0:0:0</RooooooPppppp>
                                <SuuuuuMaaa>64</SuuuuuMaaa>
                            </IiiiSuuuuu>
                            <IiiiSuuuuu>
                                <SsssssIi>8</SsssssIi>
                                <RooooooPppppp>0:0:0:0:0:0:0:0</RooooooPppppp>
                                <SuuuuuMaaa>64</SuuuuuMaaa>
                            </IiiiSuuuuu>
                        </Iiii>
                    </Site>
                </GggIiAaaaa>
            </CcccccDddd>
        </Ssssss>
        <Siiiiiiii>ZGVmYXVsdA==</Siiiiiiii>
        <PPPPPPP>
            <CcrrDddd>ZGVmYXVsdA==</CcrrDddd>
        </PPPPPPP>
    </LooooData>
</PpppppppppppData>

https://commons.apache.org/proper/commons-io/apidocs/org/apache/commons/io/FileUtils.html#contentEquals(java.io.File,java.io.File)

I searched commons-io issue tracking page. I did not find any bug related to this. I have not tried with 2.13.0 or 2.14.0 versions of commons-io

0

There are 0 best solutions below