NullPointerException with some WAV tag conversion

Issue #270 resolved
Andrea Vitali created an issue

Sometimes it happens that editing a WAV file results in a NPE. I could not get one of those affected files but I the line is this one: https://bitbucket.org/ijabz/jaudiotagger/src/a19a43998b5929b0b03e4cd26b1c03d2e1419753/src/org/jaudiotagger/audio/wav/WavTagWriter.java#lines-709

I suspect that a simple null-check is missing:

            if (tag.getID3Tag() == null)
            {
                tag.setID3Tag(WavTag.createDefaultID3Tag());
            }

Comments (4)

  1. IJabz repo owner

    Thats wierd because if there is no existing actual tag then it should create a pseudo tag, can I see your calling code ?

  2. fillobotto
    TagOptionSingleton.getInstance().setAndroid(true);
            TagOptionSingleton.getInstance().setID3V2Version(id3mode == Id3Mode.id3v24 ? ID3V2Version.ID3_V24 : ID3V2Version.ID3_V23);
            TagOptionSingleton.getInstance().setId3v1Save(false);
            TagOptionSingleton.getInstance().setId3v23DefaultTextEncoding(TextEncoding.UTF_16);
            TagOptionSingleton.getInstance().setId3v24DefaultTextEncoding(TextEncoding.UTF_8);
            TagOptionSingleton.getInstance().setId3v24UnicodeTextEncoding(TextEncoding.UTF_8);
            TagOptionSingleton.getInstance().setResetTextEncodingForExistingFrames(true);
            TagOptionSingleton.getInstance().setWriteMp3GenresAsText(true);
            TagOptionSingleton.getInstance().setWriteMp4GenresAsText(true);
            TagOptionSingleton.getInstance().setWriteChunkSize(1024 * 1024);
            TagOptionSingleton.getInstance().setCheckIsWritable(false);
            TagOptionSingleton.getInstance().setWavOptions(WavOptions.READ_ID3_UNLESS_ONLY_INFO_AND_SYNC);
            TagOptionSingleton.getInstance().setWavSaveOptions(WavSaveOptions.SAVE_ACTIVE);
            TagOptionSingleton.getInstance().setPreserveFileIdentity(true);
    
            AudioFile audio = AudioFileIO.read(new File(path));
    
            if(<sometimes then branch, sometimes else>)
                    Tag tag = audio.getTagOrCreateAndSetDefault();
                else
                    Tag tag = audio.getTagAndConvertOrCreateAndSetDefault();
    
           // then I set some field values
    
           // OR sometimes I want to remove the whole tag
           audio.setTag(audio.createDefaultTag());
           audio.getTag().deleteArtworkField();
    
           audio.commit();
    

    I am not performing any particular tag handling.

  3. Log in to comment